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} 多了一个属于本类的私有属性

 

posted @ 2022-09-02 08:53  海_纳百川  阅读(51)  评论(0编辑  收藏  举报
本站总访问量