zoukankan      html  css  js  c++  java
  • 面向对象绝命十连杀

    今天说的内容很沉重!!!  请自备氧气袋!!

      前方高能!! 发车~
    一杀

    1. 类或对象是否能做字典的key??
    首先想一下key是那些数据类型能够做的

    class Foo:
    pass
    user_info = {
    Foo:1,
    Foo():5
    }
    print(user_info)

    那么结果是什么呢??
    {<class '__main__.Foo'>: 1, <__main__.Foo object at 0x0000017EE2D7E668>: 5}

    看来类的对象是可以做字典的key的我们的猜测是没错的
    小试牛刀

    二杀

    对象中到底有什么??
    class Foo(object):
    
        def __init__(self,age):
            self.age = age
    
        def display(self):
            print(self.age)
    
    data_list = [Foo(8),Foo(9)]
    for item in data_list:
        print(item.age,item.display())
    思考一下应该打印的是什么??
    大致分析一下 列表中放着两个元素,两个元素是类的对象,下面又循环遍历这个列表打印了类的两个方法执行后的结果
    那么到底可不可以这样做呢?
    来运行一下

    8
    8 None
    9
    9 None

    那么这个None是怎么出现的呢?
    因为在执行display的方法的时候没有返回值所以就返回了None

      

    三杀

    那么下面的代码如何运行呢?
    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')
    
    config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
    for item in config_obj_list:
        print(item.num)
    
    与二杀很相似 都是循环遍历一个列表,列表里放的是类的对象但是好像类的对象有继承关系稍有点难度
    输出结果
    1
    2
    3

    了解继承关系应该结果是意料之中吧,如果不是那你的要好好看看继承了

    四杀

    class StarkConfig(object):
    
        def __init__(self,num):
            self.num = num
    
        def changelist(self,request):
            print(self.num,request)
    
    class RoleConfig(StarkConfig):
        pass
    config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
    for item in config_obj_list:
        item.changelist(168)
    这个好像跟前面的差不多但是类的方法是不一样的而且有参数
    开动大脑输出结果是??
    
    
    1 168
    2 168
    3 168
    
    前俩个都好理解,那么第三个怎么理解呢??
    在Roleconfig这个类中没有changlist方法他就继承了基类的方法

    五杀

    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)]
    for item in config_obj_list:
        item.changelist(168)
    稍有变化考验你对于self到底理解的怎么样?
    爆出你的答案:
    
    
    1 168
    2 168
    666 3
    在运行的时候一定不能乱self指的是谁,虽然自己没有要继承但是不要忘了自己的self属于谁?这样就不会迷糊了

    六杀

    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()
    config_obj_list[2].run()
    两个坑!!!首先索引的坑因该不会跳吧!要是你的结果是
    1 999
    2 999
    
    那么恭喜你入了第一个索引的坑列表的1,2是索引不是位置
    正确答案:
    2 999
    666 3
    如果不是这个答案那么你就入了第二个坑那就是self是RoleConfig的不是继承的,自己有的时候一定要用自己的

    七杀

    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)) 
    site.register('range',666)
    site.register('shilei',438)
    print(len(site._registry)) 
    
    site.register('lyd',StarkConfig(19))
    site.register('yjl',StarkConfig(20))
    site.register('fgz',RoleConfig(33))
    
    print(len(site._registry))
    
    注意是多少个打印  一共有三个
    前面的两个根本就不用看的太多只有在registrer方法里面有所以直接数就可以了
    所以结果是
    0
    2
    5
    零是为什么呢??
    因为前面没有传参数所以就是0

    八杀

    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
    结果是这样的那么恭喜你做错了! 少一个print()
    3
    19 5
    20 5
    666 33    正确结果
    还是注意self的继承关系 有自己的一定记住用自己的 

    九杀

    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)) 
    
    for k,row in site._registry.items():
        row.run()
    注意吸取前面的教训
    正确结果是
    3
    19 999
    20 999
    666 33
    希望你没有入坑

    十杀   都说九杀必死看来你挺过来了 那么就放大招了

    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)) 
    for k,row in site._registry.items():
        row.run()
    一脸闷逼吧!对呀!不然怎么能叫大招呢?
    先一步一步分析 首先 要往字典里传值,那么先看key,valur 是什么?
    self._registry={userinfo:starkconfig(
    userinfo),Department:StarkConfig(Department)}
    这一步一定要做出来然后一步一步带值
    输出结果

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

      

    恭喜你已通关

     期待升级版
  • 相关阅读:
    家庭记账本安卓版开发:第一天
    家庭记账本安卓版开发:第二天
    通过Android的API对Sqlite数据库进行操作
    通过SQL语句操作Sqlite数据库
    Activity组件(四):通过requestCode和resultCode来实现Activity间的数据回传
    Activity组件(三):通过对象实现信息添加及展示
    家庭记账本安卓版开发:第三天
    梦断代码(三)
    MacType使用配置
    去掉win7快捷方式箭头及修复锁定到任务栏失效
  • 原文地址:https://www.cnblogs.com/RootEvils/p/9554932.html
Copyright © 2011-2022 走看看