day 24 组合的补充

一、组合的补充:

  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()
View Code

三、特殊成员

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)

  

原文地址:https://www.cnblogs.com/xiaobai686/p/11755714.html