• 练习题及补充


    练习题

    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)]#R()封装了3,R的类中并没有__init__所以继承了S的init所以在调用self.num时就是封装的3
    for item in config_obj_list:
        item.changelist(168)
      '''
      1 168
      2 168
      666 3
      '''
    
    #第7题
    
    class StarkConfig(object):
    
        def __init__(self,num):
            self.num = num
    
        def changelist(self,request):
            print(self.num,request)
    
        def run(self):
            self.changelist(999) #不是继承,而是直接调用的changelist函数,关键self的指示关系。
    
    StarkConfig(1).run()
    
    
    #第10题
    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()
    
    # 19 999
    # 20 999
    # 666 999 #此处还是比较有意义的要捋清楚继承与函数之间的关系,原则是什么:就是本着自己的就是最香的原则
    
    
    #第11题
    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) #疯了吧,往里面封了两个类(1,3)
    site.register(Department,StarkConfig) #往里面封装了(2,3)两个类
    print(len(site._registry))
    for k,row in site._registry.items(): #不明白的是并没有实例化一个对象怎么就直接执行了???
        row.run()
    #StarkConfig(UserInfo).run
    #StarkConfig(Department).run
    #还蛮值得细细品味的
    """
    输出结果:
    2
    <class '__main__.UserInfo'> 999
    <class '__main__.Department'> 99
    """
    #第12题
    class F3(object):
        def f1(self):
            ret = super().f1() #按照继承顺序先先F3后F2
            print(ret)
            return(123)
    
        class F2(object):
            def f1(self):
                print("123")
    
        class F1(F3,F2):
            pass
    
        obj = F1()
        obj.f1()
        #应该特别注意super的用法
        
    #第13题
    class Base(object):
        def __init__(self, name):
            self.name = name
    
    
    class Foo(Base):
        def __init__(self, name):
            super().__init__(name) #此处的__init_指的是什么???是父级的初始函数吗???如果是为什么输出的结果会是于大爷呢????答:确实是父级的初始函数,打印结果为“于大爷”是因为你在最后self.name重新进行了赋值
            self.name = "于大爷"
    
    
    obj1 = Foo('alex')
    print(obj1.name)
    
    obj2 = Base('alex')
    print(obj2.name)
    '''
    输出结果为
    于大爷
    alex
    '''
    #第15题
    class StarkConfig(object):
        def __init__(self, num):
            self.num = num
        def __call__(self, *args, **kwargs):  #**是否可以考虑不传参数???
            print(self.num)
    class RoleConfig(StarkConfig):
        def __call__(self, *args, **kwargs):
            print(self.num)
    
    v1 = StarkConfig(1)
    v2 = RoleConfig(11)
    
    v1()
    v2()
    
    # 
    
    #第17题
    class Context:
        def __enter__(self):
            print("进入")
            return self #此处实际上是对ctx进行传参
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print("退出")
    
        def do_something(self):
            print("内部执行")
    
    
    with Context() as ctx:   #和ctx = Context()的区别是什么?当是后者是其只执行do_something的部分,
        # 具体为什么会自动执行entr和exit,我想还是和with...as有关!
        ctx.do_something()
        
      #那么我是觉得18题是有点难的
    
    #???????
    
    

    练习题补充

    #示例1:
    class Foo():
        print("123")
        def func(self):
            print("ayng")
    '''
     输出的结果为123
     类内部在解释期间会执行,方法内部在解释期间不执行只有在调用期间才执行
    
    '''
    #进出栈
    class Stack(object):
        '''
        后进先出
        '''
        def __init__(self):
            self.data_list = []
    
        def push(self,val):
            '''
            向栈中压入一个数据(入栈)
            :param val:
            :return:
            '''
            self.data_list.append(val)
    
        def pop(self):
            '''
            从栈中拿走一个数据(出栈)
            :return:
            '''
            return self.data_list.pop()
           
    
  • 相关阅读:
    WebBrowser无法显示招商银行password输入控件的问题
    对流式计算模型的理解
    Dev BarManager使用方法
    创业的需求分析——创业杂记【1】
    使用Apktools反编译apk应用
    【JUnit4.10源码分析】3.4 Description与測试树
    基于KWIC 的keyword匹配算法(管道+过滤器模式下实现)
    纯CSS滑动效果
    PhotoSwipe简介
    包加载失败的解决办法
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14097436.html
Copyright © 2020-2023  润新知