zoukankan      html  css  js  c++  java
  • 组合(嵌套)的 补充,主动调用其他成员 以及特殊成员

    组合的补充

    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)
    
    # 创建了一个列表,列表中有三个对象(实例)
    # [ StarkConfig对象(num=1), StarkConfig对象(num=2), RoleConfig对象(num=3) ]
    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)
    
    config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
    config_obj_list[1].run()   #2 999
    config_obj_list[2].run() # 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)) # 0
    site.register('range',666)
    site.register('shilei',438)
    print(len(site._registry)) # 2
    
    site.register('lyd',StarkConfig(19))
    site.register('yjl',StarkConfig(20))
    site.register('fgz',RoleConfig(33))
    
    print(len(site._registry)) # 5
    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)) # 3
    
    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)) # 3
    
    for k,row in site._registry.items():
        row.run()
    class UserInfo(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(UserInfo,StarkConfig)
    site.register(Department,StarkConfig)
    # print(len(site._registry)) # 3
    for k,row in site._registry.items():
        row.run()


    <class '__main__.UserInfo'> 999
    <class '__main__.Department'> 999

    主动调用其他类的成员

    1.方法一

    class foo(object):
        def f1(self):
            print("你好啊")
    class user(object):
        def f1(self):
            print("hello")
            foo.f1(self)
    obj=user()
    obj.f1()
    
    调用结果:
    hello
    你好啊
    注意:主动调用的时候需要自己手动传self

    2.方法二:按照类的继承顺序,找下一个

    class foo(object):
        def f1(self):
            print("你好啊")
    class user(foo):
        def f1(self):
            print("hello")
            super().f1()#按照继承顺序找下一个
    obj=user()
    obj.f1()
    
    hello
    你好啊

     特殊成员:

    1.类名()自动执行__init__

    obj=foo(1,2)

    2.对象() 自动执行__call__

    class fool(object):
        def __call__(self, *args, **kwargs):
            print(22,33,44,55)
            return 111
    obj=fool
    ret=obj.__call__(1)
    print(ret)
    
    
    22 33 44 55
    111#返回值

     3.对象["xx"]=11 自动执行__setitem__没有返回值

    class foo(object):
        def __setitem__(self, key, value):
            print("hhh")
    obj=foo()
    obj.__setitem__(1,0)
    
    hhh

     4.对象["xx"] 会自动执行__getitem__有返回值

    class foo(object): 
        def __getitem__(self, item):
            print("123")
            return "bbb"
    obj=foo()
    ret=obj.__getitem__(0)
    print(ret)
    
    123
    bbb

     5.del 对象[xx]   自动执行__delitem__     有返回值

    class foo(object): 
        def __delitem__(self, key):
            print(555)
            return 222
    
    obj=foo()
    ret=obj.__delitem__("key")
    print(ret)
    
    
    
    555
    222

    6.对象+对象  会自动执行__add__

     class foo(object):
        def __add__(self, other):
            return self.a1+other.a2

    7.with 对象 自动执行__enter__ /__exit__

    
    
    def __exit__(self, exc_type, exc_val, exc_tb)

    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)
  • 相关阅读:
    centos7上安装JupyterHub
    我的测试第一篇博客
    TCP,SYN,FIN扫描
    nmap使用帮助翻译
    MySQL 常用函数
    MySQL 视图
    MySQL 索引
    JAVA 注解
    JAVA 反射
    spring boot MySQL极简封装
  • 原文地址:https://www.cnblogs.com/wqzn/p/9555533.html
Copyright © 2011-2022 走看看