python私有属性怎么定义_python, 私有属性详解

classAnimal:

__ORE= 'Animal ore'@classmethod

def getore(cls):

# 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE

print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))classPig(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__)

2018052-20201004142018075-456490068.png

下面将父类的getore方法override

classAnimal:

__ORE= 'Animal ore'@classmethod

def getore(cls):

# 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE

print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))classPig(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__)

2018052-20201004142123627-1310729599.png

getore获取到的是Pig的私有属性了

做一个深入的实验

classAnimal:

__ORE= 'Animal ore'@classmethod

def getore(cls):

# 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE

print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE))classPig(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类中

2018052-20201004142414676-1873501920.png

classAnimal:

__COUNT=5# 私有属性全部被替换

__AGE=9def __init__(self,name):

self.__AGE+=1self._name=name

self.__COUNT+=2

classHipo(Animal):

__COUNT=55_Animal__AGE=99# 此属性才真正替换了父类的__AGE属性

h=Hipo('hipo')

print(h.__dict__)

print(Hipo.__dict__)

print(Animal.__dict__)

2018052-20201004144308766-1529001197.png

父类的初始化方法__init__中如果有私有属性,子类最好将其override

重写__init__方法,也会增加父类的私有属性

classAnimal:

__COUNT=5# 私有属性全部被替换

__AGE=9def __init__(self,name):

self.__AGE+=1self._name=name

self.__COUNT+=2

classHipo(Animal):

__COUNT=55__AGE=88_Animal__AGE=99# 此属性才真正替换了父类的__AGE属性

def __init__(self,name):

super().__init__(name)

self.__AGE+=1self.__COUNT+=2h=Hipo('hipo')

print(h.__dict__)

print(Hipo.__dict__)

print(Animal.__dict__)

2018052-20201004145040207-1137741597.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值