python, 私有属性详解
class Animal:
__ORE= 'Animal ore'
@classmethod
def getore(cls):
# 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE
print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))
class Pig(Animal):
__ORE='Pig ore'
# @classmethod
# def getore(cls):
# print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))
p=Pig()
p.getore() # 得到是Animal的__ORE
print(Pig.__dict__) # 只展现在自己类内部定义的属性,不会展现父类属性
# print(Animal.__dict__)
下面将父类的getore方法override
class Animal:
__ORE= 'Animal ore'
@classmethod
def getore(cls):
# 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE
print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))
class Pig(Animal):
__ORE='Pig ore'
@classmethod
def getore(cls):
print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))
p=Pig()
p.getore() # 得到是Animal的__ORE
print(Pig.__dict__) # 只展现在自己类内部定义的属性,不会展现父类属性
# print(Animal.__dict__)
getore获取到的是Pig的私有属性了
做一个深入的实验
class Animal:
__ORE= 'Animal ore'
@classmethod
def getore(cls):
# 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE
print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))
class Pig(Animal):
__ORE='Pig ore'
_Animal__ORE='Pig phony ORE'
# @classmethod
# def getore(cls):
# print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))
p=Pig()
p.getore() # 得到是Animal的__ORE
print(Pig.__dict__) # 只展现在自己类内部定义的属性,不会展现父类属性
# print(Animal.__dict__)
自定义一个跟替换后同名的属性于Pig类中
class Animal:
__COUNT=5 # 私有属性全部被替换
__AGE=9
def __init__(self,name):
self.__AGE+=1
self._name=name
self.__COUNT+=2
class Hipo(Animal):
__COUNT=55
_Animal__AGE=99 # 此属性才真正替换了父类的__AGE属性
h=Hipo('hipo')
print(h.__dict__)
print(Hipo.__dict__)
print(Animal.__dict__)
父类的初始化方法__init__中如果有私有属性,子类最好将其override
重写__init__方法,也会增加父类的私有属性
class Animal:
__COUNT=5 # 私有属性全部被替换
__AGE=9
def __init__(self,name):
self.__AGE+=1
self._name=name
self.__COUNT+=2
class Hipo(Animal):
__COUNT=55
__AGE=88
_Animal__AGE=99 # 此属性才真正替换了父类的__AGE属性
def __init__(self,name):
super().__init__(name)
self.__AGE+=1
self.__COUNT+=2
h=Hipo('hipo')
print(h.__dict__)
print(Hipo.__dict__)
print(Animal.__dict__)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律