Python 类的公有、私有成员

我们先上结论┗( ▔, ▔ )┛

结论

__xx__:这种系统属性或方法,还没想好怎么测试,我们就看看用户自定义的吧
| variate | from module import *| 类外 | 继承 |
| ---- | ---- | ---- |----| ---- |
| xx :公有变量 | ✔ | ✔ | ✔ |
| _xx :单前置下划线 | ✘ | ✔ | ✔ |
| __xx:双前置下划线 | ✘ | ✘ | ✘ |

from module import * 测试部分
a.py

name = "name"
_name = "_name"
__name = "__name"

test.py

from a import *

print(name)
# print(_name)      #NameError: name '_name' is not defined
# print(__name)      #NameError: name '__name' is not defined

类外 测试部分

class Person(object):
    name = "name"
    _name = "_name"
    __name = "__name"

    @staticmethod
    def method():
        print("method()")

    @staticmethod
    def _method():
        print("_method()")

    @staticmethod
    def __method():
        print("__method()")


instance = Person
print(instance.name)  # name
print(instance._name)  # _name
# print(instance.__name)         # AttributeError: type object 'Person' has no attribute '__name'
instance.method()  # method()
instance._method()  # _method()
# instance.__method()     #AttributeError: type object 'Person' has no attribute '__method'

继承 测试部分

class PersonChild(Person):
    def out(self):
        print(instance.name)  # name
        print(instance._name)  # _name
        # print(instance.__name)        # AttributeError: 'PersonChild' object has no attribute '__name'
        self.method()  # method()
        self._method()  # _method()
        # self.__method()     # AttributeError: 'PersonChild' object has no attribute '__method'



instance = PersonChild()
instance.out()
posted @ 2020-11-14 00:16  探索星空  阅读(303)  评论(0编辑  收藏  举报