python的类方法中下划线表示含义
__foo__: 定义的是特殊方法,一般是系统定义名字 ,如 __init__() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
举例:
# test2.py _var = 3 def _method(): print(__name__) # 返回当前文件名称 def method(): return _method()
from test2 import * method() # test2 _method() # NameError: name '_method' is not defined. Did you mean: 'method'? print(_var) # NameError: name '_var' is not defined
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了
举例:
class Animal(object): def __init__(self, name) -> None: self.name = name self.__age = 1 a = Animal('a') print(a.name) # a print(a.__dict__) # {'name': 'a', '_Animal__age': 1} 可见其中的__age已经变为了_Animal__age print(a.__age) # 报错: # AttributeError: 'Animal' object has no attribute '__age' print(a._Animal__age) # 1 ## 创建继承Animal的子类Dog class Dog(Animal): pass b = Dog('b') print(b.__dict__) # {'name': 'b', '_Animal__age': 1} 其属性与父类相同 ## 创建继承自Animal的子类Cat class Cat(Animal): def __init__(self, name) -> None: super().__init__(name) self.__age = 2 c = Cat('c') print(c.__dict__) # {'name': 'c', '_Animal__age': 1, '_Cat__age': 2} 多了一个属于本类的私有属性
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/16648564.html,如有侵权联系删除