day16 类之间的关系 特殊成员
类与类之间的关系
1.依赖关系(一个对象当另一个对象的参数) 关系最浅,
1 特殊成员: 2 1. 类名() 会自动调用 __init__() 3 class Foo: 4 5 def__init__(self, name): 6 self.name = name 7 self.age = 18 8 obj = Foo('wupeiqi')# 自动执行类中的 __init__ 方法 9 10 2. 对象()或者 类名()() 会自动调用 __call__() 11 3. 对象[key] 会自动调用 __getitem__() 12 4. 对象[key]=value 会自动调用 __setitem__() 13 5. del 对象[key] 会自动调用 __delitem__() 14 6. 对象+对象 会自动调用 __add__() 15 7. wiht 对象 as 对自动调用 __enter__和__exit__ 16 8. 打印对象的时候会自动执行 __str__ 17 9.干掉hash __hash__=None 就不可hash了 18 10.查看类信息 __doc__ 19 class Foo(object): 20 """这里描述类的信息""" 21 def func(self): 22 pass 23 print(Foo.__doc__) #这里描述类的信息 24 11.表示操作的对象是什么类型 __class__ 25 12.查看当前对象在那个模块 __module__ 26 13.python解释器在垃圾回收自动执行 __del__ 27 14.获得类或对象的全部信息,以字典形式返回 28 __dict__ 29 15.如果一个类中定义了__str__方法, 30 那么在打印 对象 时,默认输出该方法的返回值。 31 class Foo: 32 def__str__(self): 33 return'wupeiqi'
from lib.ss import a #示例类 dog class doges(object): """类的描述信息""" def __init__(self,name,food): self.name=name self.food=food self.data={}#定义一个类的字典 def __call__(self, *args, **kwargs):#对象后面加括号解执行 print(*args) def __str__(self):#默认输出返回值 return self.name def __getitem__(self):#可以获取类的的字典 return self.data def __setitem__(self, key, value):#可以设置类的的字典 self.data[key]=value def __delitem__(self, key):#可以删除类的字典的内容 del self.data[key] dog=doges('xxx','iii') print(dog.__doc__) b=a() print(b.__module__)#操作的对象的那个模块 print(dog.__class__)#当前操作的对象的类是什么 dog('111')# print(doges.__dict__)#查看类或对象的成员 类只打印类的成员不打印对象的成员 print(dog.__dict__)#查看类或对象的成员 对象只打印对象的成员不打印类的成员 print(dog)#打印 __str__的返回值 print(dog.__str__())#打印返回值 dog['1']=1000#触发.__setitem__() dog['2']=1000#触发.__setitem__() print(dog.__getitem__()) print(dog.__delitem__('1'))#删除类中字典 print(dog.__getitem__()) #设置类的特殊方法 def func(self): print('hello word%s'%self.name) print() def __init__(self,name,age): self.name=name self.age=age ##type参数 1:类名 2.类的基类 3.类的成员,字典格式 CAT=type('CAT',(object,),{'func':func,'__init__':__init__}) cat=CAT('喵喵',3) cat.func() print(cat.name,cat.age)
#定义 一个新方法 def bulk(self): print("%s is talking...."%self.name) class DOG(object): def __init__(self,name): self.name=name def eat(self,food): print('%s is eating %s'%(self.name,food)) d=DOG('一只狗') stres=input('方法:').strip()#手动输入方法 if hasattr(d,stres):#通过字符串反射对象中的方法,是否存在 func=getattr(d,stres)#调用此方法 func("骨头")#执行方法 else: setattr(d,stres,bulk)#对象增加一个方法 返回一个内存地址 getattr(d,stres)(d)#调用此方法 增加的 #d.talk(d) #属性修改 stres1=input('属性:').strip()#手动输入属性 if hasattr(d,stres1):#如果已经存在 attr=getattr(d,stres1)#调用 a=input('重新赋值:').strip() setattr(d,stres1,a) print(getattr(d,stres1)) else: a=input('新赋值:').strip() setattr(d,stres1,a)#对象增加一个属性 ,赋值 返回这个属性的值 print(stres1) print(getattr(d,stres1)) print(d.__dict__) dela=input('删除属性:').strip() if hasattr(d,dela):#如果已经存在 delattr(d,dela)#进行删除 print('删除成功') print(d.__dict__)