面向对象4
一、绑定方法和非绑定方法
-
对象的绑定方法
-
定义
-
在类中没有被任何装饰器修饰的方法,专门为对象定制
2. 调用方式
-
-
-
对象调用时,将自己作为第一个参数传入
-
类调用时,第一个参数手动传值
-
-
2. 类的绑定方法
-
定义
类中使用@classmethod修饰的方法,专门为类定制
2. 调用方式
-
-
-
对象调用时,默认第一个参数是这个对象的类
-
类调用时,将自己作为第一个参数传入
-
-
3. 非绑定方法
-
定义
类中使用@staticmethod修饰的方法,和普通函数一样,不会自动传值。
2. 调用方式
'.' + 函数名调用
二、isinstance和type
-
区别
type() 不会认为子类是一种父类类型,isinstance() 会认为子类是一种父类类型
2. 代码
class Foo(object): pass class Bar(Foo): pass print(type(Foo()) == Foo) print(type(Bar()) == Foo) print(isinstance(Bar(),Foo)) 输出 True False True
三、issubclass
-
作用
判断一个类是否是另一个类的子类
2. 代码
class Parent: pass class Sub(Parent): pass print(issubclass(Sub, Parent)) print(issubclass(Parent, object)) 输出 True True
四、反射
-
定义
通过字符串操作类或对象的属性,本质就是使用内置函数
2. 反射的四个内置函数
-
hasattr:判断一个方法是否存在于这个类中
-
getattr:根据字符串获取对象里对应方法的内存地址,加括号即可调用
-
setattr:将外部的一个函数绑定到实例中
-
delattr:删除一个实例或类中的方法
3. 使用方法
class People: country = 'China' def __init__(self, name): self.name = name def eat(self): print('%s is eating' % self.name) peo1 = People('byx') print(hasattr(peo1, 'eat')) print(getattr(peo1, 'eat')) print(getattr(peo1, 'xxxxx', None)) setattr(peo1, 'age', 18) print(peo1.age) print(peo1.__dict__) delattr(peo1, 'name') # del peo1.name print(peo1.__dict__) 输出 True <bound method People.eat of <__main__.People object at 0x00000299755652E8>> None 18 {'name': 'byx', 'age': 18} {'age': 18}