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 @   海_纳百川  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
本站总访问量8991036
 
点击右上角即可分享
微信分享提示