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

        代码运行结果为:

         

        

  • 相关阅读:
    02.简单的DOM操作
    03.获取和设置元素特性的值
    异常为"当IDENTITY_INSERT设置为OFF时" 的解决
    GridView的RowCommand事件中取得行索引 技巧
    01.判断页面加载完成的方法
    今天新开了博客园
    C#巧用anchor和dock设计复杂界面(控件随着窗体大小的变化而变化)
    C#如何使用webbrowser控件制作一个简易的IE浏览器(菜鸟级)
    断箭——不相信自己的意志,永远也做不成将军
    成长与成功
  • 原文地址:https://www.cnblogs.com/cbslock/p/11220033.html
Copyright © 2011-2022 走看看