zoukankan      html  css  js  c++  java
  • Python

    __x会自动变形为_类名__x

    正常情况

    class A:
    
        def foo(self):
            print('from A')
    
        def test(self):
            self.foo()
    
    
    class B(A):
    
        def foo(self):
            print('from B')
    
    b = B()
    b.test()
    # from B
    

    把foo定义成私有

    class A:
    
        def __foo(self):    #双下线私有属性在定义时就变形为_A__fa
            print('from A')
    
        def test(self):
            self.__foo()    #调用变形后的私有属性对象,即_A__fa
    
    
    class B(A):
    
        def __foo(self):
            print('from B')
    
    b = B()
    b.test()
    # from A
    

    原理:父类的__x私有属性在定义时已经变形为_父类__x,子类可以继承这个属性,但无法覆盖。所以test()里面的self.__foo的self已经绑定了父类,子类的__foo()无法覆盖。

    class A:
    
        def __foo(self):    #双下线私有属性在定义时就变形为_A__fa
            print('from A')
    
        def test(self):
            self.__foo()    #调用变形后的私有属性对象,即_A__fa
    
    
    class B(A):
    
        def __foo(self):
            print('from B')
    
    b = B()
    b._A__foo()
    # from A
    

    Python的私有属性的缺点

    这种变形并没有真正限制从外部直接访问属性

    class A:
    
        def __foo(self):
            print('from A')
    
        def test(self):
            self.__foo()
    
    a = A()
    a._A__foo()
    
  • 相关阅读:
    pat1041. Be Unique (20)
    Linux基础命令---service
    Linux基础命令---last
    Linux基础命令---date
    Linux基础命令---ckconfig
    Linux基础命令---cal
    Linux基础命令---bc
    linux基础命令---df
    linux基础命令---du
    Linux基础命令---hwclock
  • 原文地址:https://www.cnblogs.com/allen2333/p/9297317.html
Copyright © 2011-2022 走看看