zoukankan      html  css  js  c++  java
  • 第22天(明天是面向对象的进阶)

    1、封装

      简而言之,在类中的属性变量(函数)名以双下划线开头的就是封装,格式为:

      __A。

      其作用就是一个保护作用,外部不能直接调用(当然只是个规定)

      class Abc:

        def __init__(self, a):

          self.__a = a

        def __abc(self):

          print('你调不到我')

      这是格式。但是若真的想在外部调用这种变量的话,用_类名__变量名的方法;这里用

      _Abc__a, _Abc_abc

      进行实例化:

      a = Abc(10)

      a._Abc__a   ------->   这个是10

      a._Abc__abc  ----------->    这个是  你调不到我  这句话

      这些种方法不要用,会被大佬打死。虽然是真的可以调用

    2、property  

      用两个字概括它的功能,就是伪装。

      property一般作为装饰器使用(反正现在为止是这样的)

      如上例:

    class Abc:

        def __init__(self, a):

          self.__a = a

        @property

        def name(self):

          return self.__a

      此时调用用 :

        a.name  ---------->  10

        代替上面的a._Abc__a(有效的防止被大佬打,还能看上去很像是一个__init__里的属性)

        此处应注意:property装饰的函数不能有除了self以外的参数

    3、classmethod与staticmethod

      这二者都是作为装饰器在类内使用的:

      @classmethod

      可以用作修改静态变量

    class Goods:
    __count_off = 0.8

    def __init__(self, price ,name):
    self.__price = price
    self.name = name

    @property
    def price(self):
    return self.__price * Goods.__count_off

    @classmethod
    def change(self, a):
    Goods.__count_off = a


    apple = Goods(5, 'apple')
    banana = Goods(8,'banana')
    Goods.change(1)
    print(apple.price)
    print(banana.price)

      classmethod用老师的原话说是    类方法 可以直接被类调用 不需要默认传对象参数 只需要传一个类参数就可以了

      个人理解是确实是个类方法,因为没这东西不能写Goods.change(1),只能用apple.change(1)或者是banana.change(1)来改

      其次,def change(self, a):
                Goods.__count_off = a

      这里的self可以换成别的名字,Goods也可以随之变动,如:

          def change(b, a):
                   b.__count_off = a

    @staticmethod下面的函数无默认参数self,就当作是在外部定义的函数来用就ok

      

  • 相关阅读:
    C++中使用stringstream进行类型转换操作
    代理模式
    观察者模式 VS 责任链模式
    10.模板方法模式
    2.里氏替换原则
    单一职责原则
    规格模式
    策略模式的扩展——策略枚举
    策略模式 VS 桥梁模式
    原型模式【下】
  • 原文地址:https://www.cnblogs.com/ylx900/p/8869951.html
Copyright © 2011-2022 走看看