一、组合的补充:
1、类或对象可以做字典的key
2、对象中到底有什么?
1 # class Foo(object): 2 # 3 # def __init__(self,age): 4 # self.age = age 5 # 6 # def display(self): 7 # print(self.age) 8 # 9 # data_list = [Foo(8),Foo(9)] 10 # for item in data_list: 11 # print(item.age,item.display())
1 # by luffycity.com 2 3 # ### 1. 类或对象是否能做字典的key 4 """ 5 class Foo: 6 pass 7 8 user_info = { 9 Foo:1, 10 Foo():5 11 } 12 13 print(user_info) 14 """ 15 # ### 2. 对象中到底有什么? 16 17 # class Foo(object): 18 # 19 # def __init__(self,age): 20 # self.age = age 21 # 22 # def display(self): 23 # print(self.age) 24 # 25 # data_list = [Foo(8),Foo(9)] 26 # for item in data_list: 27 # print(item.age,item.display()) 28 29 # ### 3. 30 31 # class StarkConfig(object): 32 # 33 # def __init__(self,num): 34 # self.num = num 35 # 36 # def changelist(self,request): 37 # print(self.num,request) 38 # 39 # class RoleConfig(StarkConfig): 40 # 41 # def changelist(self,request): 42 # print('666') 43 # 44 # # 创建了一个列表,列表中有三个对象(实例) 45 # # [ StarkConfig对象(num=1), StarkConfig对象(num=2), RoleConfig对象(num=3) ] 46 # config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] 47 # for item in config_obj_list: 48 # print(item.num) 49 50 # 1 2 3 51 52 # ### 4. 53 # class StarkConfig(object): 54 # 55 # def __init__(self,num): 56 # self.num = num 57 # 58 # def changelist(self,request): 59 # print(self.num,request) 60 # 61 # class RoleConfig(StarkConfig): 62 # pass 63 # 64 # # 创建了一个列表,列表中有三个对象(实例) 65 # # [ StarkConfig对象(num=1), StarkConfig对象(num=2), RoleConfig对象(num=3) ] 66 # config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] 67 # for item in config_obj_list: 68 # item.changelist(168) 69 # 70 71 # #### 5 72 # class StarkConfig(object): 73 # 74 # def __init__(self,num): 75 # self.num = num 76 # 77 # def changelist(self,request): 78 # print(self.num,request) 79 # 80 # class RoleConfig(StarkConfig): 81 # 82 # def changelist(self,request): 83 # print(666,self.num) 84 # 85 # # 创建了一个列表,列表中有三个对象(实例) 86 # # [ StarkConfig对象(num=1), StarkConfig对象(num=2), RoleConfig对象(num=3) ] 87 # config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] 88 # for item in config_obj_list: 89 # item.changelist(168) 90 91 # #### 6 92 93 # class StarkConfig(object): 94 # 95 # def __init__(self,num): 96 # self.num = num 97 # 98 # def changelist(self,request): 99 # print(self.num,request) 100 # 101 # def run(self): 102 # self.changelist(999) 103 # 104 # class RoleConfig(StarkConfig): 105 # 106 # def changelist(self,request): 107 # print(666,self.num) 108 # 109 # config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] 110 # config_obj_list[1].run() 111 # config_obj_list[2].run() # 666 3 112 113 # #### 7 114 115 # class StarkConfig(object): 116 # 117 # def __init__(self,num): 118 # self.num = num 119 # 120 # def changelist(self,request): 121 # print(self.num,request) 122 # 123 # def run(self): 124 # self.changelist(999) 125 # 126 # class RoleConfig(StarkConfig): 127 # 128 # def changelist(self,request): 129 # print(666,self.num) 130 # 131 # 132 # class AdminSite(object): 133 # def __init__(self): 134 # self._registry = {} 135 # 136 # def register(self,k,v): 137 # self._registry[k] = v 138 # 139 # site = AdminSite() 140 # print(len(site._registry)) # 0 141 # site.register('range',666) 142 # site.register('shilei',438) 143 # print(len(site._registry)) # 2 144 # 145 # site.register('lyd',StarkConfig(19)) 146 # site.register('yjl',StarkConfig(20)) 147 # site.register('fgz',RoleConfig(33)) 148 # 149 # print(len(site._registry)) # 5 150 151 152 153 # #### 8 154 # class StarkConfig(object): 155 # 156 # def __init__(self,num): 157 # self.num = num 158 # 159 # def changelist(self,request): 160 # print(self.num,request) 161 # 162 # def run(self): 163 # self.changelist(999) 164 # 165 # class RoleConfig(StarkConfig): 166 # 167 # def changelist(self,request): 168 # print(666,self.num) 169 # 170 # class AdminSite(object): 171 # def __init__(self): 172 # self._registry = {} 173 # 174 # def register(self,k,v): 175 # self._registry[k] = v 176 # 177 # site = AdminSite() 178 # site.register('lyd',StarkConfig(19)) 179 # site.register('yjl',StarkConfig(20)) 180 # site.register('fgz',RoleConfig(33)) 181 # print(len(site._registry)) # 3 182 # 183 # for k,row in site._registry.items(): 184 # row.changelist(5) 185 186 187 ### 9 188 # class StarkConfig(object): 189 # 190 # def __init__(self,num): 191 # self.num = num 192 # 193 # def changelist(self,request): 194 # print(self.num,request) 195 # 196 # def run(self): 197 # self.changelist(999) 198 # 199 # class RoleConfig(StarkConfig): 200 # 201 # def changelist(self,request): 202 # print(666,self.num) 203 # 204 # class AdminSite(object): 205 # def __init__(self): 206 # self._registry = {} 207 # 208 # def register(self,k,v): 209 # self._registry[k] = v 210 # 211 # site = AdminSite() 212 # site.register('lyd',StarkConfig(19)) 213 # site.register('yjl',StarkConfig(20)) 214 # site.register('fgz',RoleConfig(33)) 215 # print(len(site._registry)) # 3 216 # 217 # for k,row in site._registry.items(): 218 # row.run() 219 220 ## 10 221 # 222 # class UserInfo(object): 223 # pass 224 # 225 # class Department(object): 226 # pass 227 # 228 # class StarkConfig(object): 229 # 230 # def __init__(self,num): 231 # self.num = num 232 # 233 # def changelist(self,request): 234 # print(self.num,request) 235 # 236 # def run(self): 237 # self.changelist(999) 238 # 239 # class RoleConfig(StarkConfig): 240 # 241 # def changelist(self,request): 242 # print(666,self.num) 243 # 244 # class AdminSite(object): 245 # def __init__(self): 246 # self._registry = {} 247 # 248 # def register(self,k,v): 249 # self._registry[k] = v(k) 250 # 251 # site = AdminSite() 252 # site.register(UserInfo,StarkConfig) 253 # site.register(Department,StarkConfig) 254 # print(len(site._registry)) # 3 255 # for k,row in site._registry.items(): 256 # row.run() 257 258 259 # 总结: 260 """ 261 1. 对象中封装了什么? 262 2. self到底是谁? 263 """
二、主动调用其它类的成员
方式一、
class Base(object): def f1(self): print('5个功能') class Foo(object): def f1(self): print('3个功能') Base.f1(self) 执行完Foo中的方法,主动另外Base类的成员 obj = Foo() obj.f1() 总结: Base.实例方法(自己传self) 与继承无关
方式二:
按照类的继承顺序,找下一个,与继承有关
class Base(object): def f1(self): print("5个功能") class Foo(Base): def f1(self): print("3个功能") super().f1() #按照继承顺序往上找 obj = Foo() obj.f1()
1 # by luffycity.com 2 """""" 3 4 5 """ 6 class Base(object): 7 def f1(self): 8 print('5个功能') 9 10 # obj = Base() 11 # Base.f1(obj) 12 13 obj = Base() 14 obj.f1() 15 16 """ 17 18 19 # ########### 方式一 20 # class Base(object): 21 # 22 # def f1(self): 23 # print('5个功能') 24 # 25 # class Foo(object): 26 # 27 # def f1(self): 28 # print('3个功能') 29 # Base.f1(self) 30 # 31 # obj = Foo() 32 # obj.f1() 33 34 35 # ########### 方式二:按照类的继承顺序,找下一个. 36 """ 37 class Base(object): 38 def f1(self): 39 print('5个功能') 40 41 class Foo(Base): 42 def f1(self): 43 super().f1() 44 print('3个功能') 45 46 obj = Foo() 47 obj.f1() 48 """ 49 50 # ########### 方式二:按照类的继承顺序,找下一个. 51 class Foo(object): 52 def f1(self): 53 super().f1() 54 print('3个功能') 55 56 class Bar(object): 57 def f1(self): 58 print('6个功能') 59 60 class Info(Foo,Bar): 61 pass 62 63 # obj = Foo() 64 # obj.f1() 65 66 obj = Info() 67 obj.f1()
三、特殊成员
class Foo(object): def __init__(self,a1,a2): self.a1 = a1 self.a2 = a2 def __call__(self, *args, **kwargs): print(11111,args,kwargs) return 123 def __getitem__(self, item): print(item) return 8 def __setitem__(self, key, value): print(key,value,111111111) def __delitem__(self, key): print(key) def __add__(self, other): return self.a1 + other.a2 def __enter__(self): print('1111') return 999 def __exit__(self, exc_type, exc_val, exc_tb): print('22222') 1. 类名() 自动执行 __init__ # obj = Foo(1,2) 2. 对象() 自动执行 __call__ # ret = obj(6,4,2,k1=456) 3. 对象['xx'] 自动执行 __getitem__ # ret = obj['yu'] # print(ret) 4. 对象['xx'] = 11 自动执行 __setitem__ # obj['k1'] = 123 5. del 对象[xx] 自动执行 __delitem__ # del obj['uuu'] 6. 对象+对象 自动执行 __add__ # obj1 = Foo(1,2) # obj2 = Foo(88,99) # ret = obj2 + obj1 # print(ret) 7. with 对象 自动执行 __enter__ / __exit__ # obj = Foo(1,2) # with obj as f: # print(f) # print('内部代码') 8. 真正的构造方法 # class Foo(object): # def __init__(self, a1, a2): # 初始化方法 # """ # 为空对象进行数据初始化 # :param a1: # :param a2: # """ # self.a1 = a1 # self.a2 = a2 # def __new__(cls, *args, **kwargs): # 构造方法 # """ # 创建一个空对象 # :param args: # :param kwargs: # :return: # """ # return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.). # # obj1 = Foo(1,2) # print(obj1) # # obj2 = Foo(11,12) # print(obj2)