组合
【适合没干系的横向类,比如池塘,乌龟,鱼】
把类的实例化放到新类里面
属性名和方法名相同,属性会覆盖掉方法
绑定
方法需要实例才能被调用!! 这种限制即绑定
用self接受绑定
class Ball():
def xx(self,a):
print(...)
b = Ball();
b.xx('123');
def xx(self,a):
print(...)
b = Ball();
b.xx('123');
删除del Ball类时,b.xx('123')仍然可以调用
即
通过绑定使用实例属性,类属性通常用来跟踪相关的值
类中定义的属性和方法是静态变量,类被删除,这些仍然存在
类和对象相关的内置函数BIF
issubclass(a,b) ---如果a是b的子类,返回true
1.一个类,自己是自己的子类
2.b可以是类对象组成的元组,只要a是其中任何一个的子类,返回true
isinstance(a,b) --a是实例对象,b是类 a是否是b的实例对象
1.b页可以是类或类元组
2.如果不是类/类元组 返回TypeError异常
3.a不是实例对象,永远false
hasattr(对象,'属性名') ---测试对象是否有属性
getattr(对象,'name'[,"default"]) ---返回对象指定的属性值,如果该属性不存在,【如果设置了default,则打印之】,否则抛出TypeError异常
setattr(对象,'name',value) ---设定对象属性的值,如果该属性不存在,新建
delattr(对象,'name') ---存在,则删除,不存在,抛出AttributeError异常
property(fget=None//获得属性的方法,fset=None//设置,fdel=None//删除,doc=None) ---设置一个新的属性,去定义已有的属性