zoukankan      html  css  js  c++  java
  • 18面向对象--成员和组合

    1、成员的分类:

      1、变量

        类变量:顾名思义就是类中的变量

        实例变量:顾名思义就是实例化对象中的变量(__init__初始化的是实例变量)

     1 # 区分实例变量和类变量
     2 # 通过题目加深理解
     3 class StarkConfig(object):
     4 
     5     def __init__(self):
     6        self.list_display = []
     7 
     8     def get_list_display(self):
     9         self.list_display.insert(0, 33)
    10         return self.list_display
    11 
    12 
    13 class RoleConfig(StarkConfig):
    14     list_display = [11, 22]
    15 
    16 
    17 s1 = StarkConfig()    # 需要理解。这里的list是实例变量而不是类变量。
    18 
    19 result1 = s1.get_list_display()
    20 result2 = s1.get_list_display()
    21 
    22 
    23 
    24 '''
    25 ------------------------------------------------------
    26 '''
    27 class StarkConfig2(object):
    28     list_display = []
    29 
    30     def get_list_display(self):
    31         self.list_display.insert(0, 33)
    32         return self.list_display
    33 
    34 
    35 class RoleConfig2(StarkConfig):
    36     list_display = [11, 22]
    37 
    38 
    39 s1 = RoleConfig2()
    40 s2 = RoleConfig2()
    41 
    42 
    43 result3 = s1.get_list_display()
    44 print(result1)
    45 
    46 result4 = s2.get_list_display()
    47 print(result2)

       如果能正确判断输出,估计就琢磨的差不多了

      2、方法

        实例方法:     

          需要调用构造方法初始化的值的时候使用(说白点就是要传参的) ---需要实例化调用
          def fun1(self):
            print(self.paral)

        静态方法:    

          静态方法需要在方法前面加@staticmethod装饰器
          如果方法中无需使用对象中封装的值,那么就可以使用静态方法(不用传参数的,传也不报错) ---可直接类调用
          @staticmethod
          def func2(para3):
            print(para3)

        类方法:

          类方法需要在方法前面加@classmethod装饰器
          实例方法中的self指向的是对象,而类方法中自带的cls则指向的是类。
          @classmethod
          def fun3(cls, para4):
            print(cls, para4)

        #方法的公有和私有(不算多重要):

          方法默认都是公共的。如果要改成私有方法。方法名前加两个下划线即可。私有方法无法继承。

      3、属性

        将方法变成属性。方法前面加@property装饰器。然后调用的时候不需要在方法后面加括号。

    2、组合(嵌套):

      关于组合需要注意两点:

        1、对象中封装的东西

        2、以及self的指向

    #判断打印结果1.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('语文', StarkConfig(19))
    site.register('数学', StarkConfig(20))
    site.register('英语', RoleConfig(33))
    
    for amd, row in site._registry.items():
        row.run()

        代码运行结果为:

         

        

  • 相关阅读:
    黑马视频-事务
    黑马视频—循环
    黑马视频-子查询
    黑马视频-索引
    黑马视频-SQL之case
    总结 总结
    设计模式总结
    全局变量 /static全局变量 /局部变量/成员变量/extern 分析
    runtime 内涵篇
    runtime 使用总结
  • 原文地址:https://www.cnblogs.com/cbslock/p/11220033.html
Copyright © 2011-2022 走看看