一.组合
class Foo(object): def __init__(self,age): self.age = age def display(self): print(self.age) data_list = [Foo(8),Foo(9)] for item in data_list: print(item.age,item.display()) #结果:8 8 None 9 9 None
class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) class RoleConfig(StarkConfig): def changelist(self,request): print("666") config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] for item in config_obj_list: print(item.num)
class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) class RoleConfig(StarkConfig): pass config_obj_list=[StarkConfig(1),StarkConfig(2),RoleConfig(3)] for item in config_obj_list: item.changelist(168) #结果:1 168 2 168 3 168
class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) class RoleConfig(StarkConfig): def changelist(self,request): print(666,self.num) config_obj_list=[StarkConfig(1),StarkConfig(2),RoleConfig(3)] for item in config_obj_list: item.changelist(168) #结果: 1 168 2 168 666 3
实例
class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) def run(self): self.changelist(999) class RoleConfig(StarkConfig): def changelist(self,request): print(666,self.num) class AdminSite(object): def __init__(self): self._registry = {} def register(self,k,v): self._registry[k] = v site = AdminSite() print(len(site._registry)) site.register("range",666) site.register("shilei",438) print(len(site._registry)) #结果: 0 2
class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) def run(self): self.changelist(999) class RoleConfig(StarkConfig): def changelist(self,request): print(666,self.num) class AdminSite(object): def __init__(self): self._registry = {} def register(self,k,v): self._registry[k] = v site = AdminSite() # print(len(site._registry)) # site.register("range",666) # site.register("shilei",438) # print(len(site._registry)) site.register("lyd",StarkConfig(19)) site.register("yjl",StarkConfig(20)) site.register("fgz",RoleConfig(33)) print(len(site._registry)) for k,row in site._registry.items(): row.changelist(5) #结果: 19 5 20 5 666 33
class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) def run(self): self.changelist(999) class RoleConfig(StarkConfig): def changelist(self,request): print(666,self.num) class AdminSite(object): def __init__(self): self._registry = {} def register(self,k,v): self._registry[k] = v site = AdminSite() site.register("lyd",StarkConfig(19)) site.register("yjl",StarkConfig(20)) site.register("fgz",RoleConfig(33)) print(len(site._registry)) for k,row in site._registry.items(): row.run() #结果: 19 999 20 999 666 33
class Userlnfo(object): pass class Department(object): pass class StarkConfig(object): def __init__(self,num): self.num = num def changelist(self,request): print(self.num,request) def run(self): self.changelist(999) class RoleConfig(StarkConfig): def changelist(self,request): print(666,self.num) class AdminSite(object): def __init__(self): self._registry = {} def register(self,k,v): self._registry[k] = v(k) site = AdminSite() site.register(Userlnfo,StarkConfig) site.register(Department,StarkConfig) print(len(site._registry)) for k,row in site._registry.items(): row.run() #结果: Userlnfo类 999 # Department类 999
总结:
1.对象中封装了什么
2.self 到底是谁
二.主动调用其它类的成员
方式一:
class Base: def f1(self): print("5个功能") class Foo: def f1(self): print("3个功能") Base.f1(self) obj = Foo() obj.f1()
总结:
Base.实例方法(自己传self)
与继承无关
方式二:按照类的继承顺序,找下一个
class Foo: def f1(self): super().f1() print("3个功能") class Bar: def f1(self): print("5个功能") class lnfo(Foo,Bar): pass obj = lnfo() obj.f1() class Foo: def f1(self): print("5个功能") class Bar(Foo): def f1(self): super().f1() print("3个功能") obj = Bar() obj.f1()
三.特殊成员