• 第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

      

  • 相关阅读:
    Java代码打成jar后 classgetClassLoadergetResource("")返回为null
    springboot-yml内list、map组合写法
    rpc-java 生成代码路径设置
    Git操作 :从一个分支cherry-pick多个commit到其他分支
    使用maven插件生成grpc所需要的Java代码
    'Failed to import pydot. You must `pip install pydot` and install graphviz
    seasonal_decompose plot figsize
    Failed to install 'TwoSampleMR' from GitHub
    prophet Building wheel for fbprophet (setup.py) ... error
    python matplotlib 绘图线条类型和颜色选择
  • 原文地址:https://www.cnblogs.com/ylx900/p/8869951.html
Copyright © 2020-2023  润新知