• 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)
    

      

  • 相关阅读:
    在小程序开发的新风口 看华为云如何助立创科技抢占市场红利
    华为云软件开发云助力集时通软件敏捷开发
    一站式云端安卓软件开发工具的体验之路!
    一名优秀的全栈工程师必需的开发工具
    学哪种编程语言更有“钱”赚?
    深度剖析:最新云端开发工具如何实现敏捷+DevOps开发落地
    软件开发未来发展五大趋势,从业者们注意了!
    十个最有“钱景”的IT技能, 你掌握了哪个?
    “敏捷开发”之白话篇
    解决软件开发中的多个痛点——华为软件开发云
  • 原文地址:https://www.cnblogs.com/xiaobai686/p/11755714.html
Copyright © 2020-2023  润新知