码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象(2)

时间:2017-08-16 21:54:38      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:面向   lam   全局   面向对象   基本   使用   重要   method   code   

classmethod 和staticmethod的区别

classmethod:我们把它叫做类方法

staticmethod:我们把它叫做静态方法

在python中,静态方法和类方法都是可以通过类对象和类对象实例访问,但是区别是:

1.@classmethod:是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的叫作实例方法,类方法的参数是cls,而实例方法的参数是self,它表示该类的一个实例

2.普通对象方法至少需要一个self参数,表示类对象实例

3.类方法有类变量cls传入从而可以用cls做一些相关的处理,并且有子类继承是,调用该类方法时,传入的类变量cls是子类而非父类 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。 

4.静态方法则没有,它基本上跟一个全局函数相同,一般来说用的很少

isinstance和issubclass:

我的理解是,isinstance是检查,对象是不是类的对象的

issubclass是检查,子类是不是父类的子类

同志们重点来了啊

反射:反射就是指程序可以访问,检测和修改它本身状态或行为的一种能力

python面向对象中的反射,通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

在这里有两个非常重要的方法:

hasattr

getatter

我的理解是是这样的,有什么不对的希望大家指出,就是说hasattr就是一个检查的作用,就是检查是否含有某属性,它会返回一个布尔值,而getattr是获取这个属性的,类方法输出的时候在后面直接加()就搞定了,它们可以运用到类,对象,模块中(在模块中分内模块和外模块的)

在这里还有一个setattr和delattr,做于了解

class Foo:
    f = 类的静态变量
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say_hi(self):
        print(hi,%s%self.name)

obj=Foo(egon,73)

#检测是否含有某属性
print(hasattr(obj,name))
print(hasattr(obj,say_hi))

#获取属性
n=getattr(obj,name)
print(n)
func=getattr(obj,say_hi)
func()

print(getattr(obj,aaaaaaaa,不存在啊)) #报错

#设置属性
setattr(obj,sb,True)
setattr(obj,show_name,lambda self:self.name+sb)
print(obj.__dict__)
print(obj.show_name(obj))

#删除属性
delattr(obj,age)
delattr(obj,show_name)
delattr(obj,show_name111)#不存在,则报错

print(obj.__dict__)

 

面向对象(2)

标签:面向   lam   全局   面向对象   基本   使用   重要   method   code   

原文地址:http://www.cnblogs.com/liuchengdong/p/7375514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!