python 直接访问类的私有属性或方法

# 内容:直接访问类的私有属性或者方法 #

# 环境:py 3.6.2 #


1 - 访问类的私有属性或者方法.

首先我们定义一个包含私有属性的类

class Private():
	def __init__(self):
		self.__private = 521

实例化并尝试访问__private私有属性,

private_out = Private()
private_out.__private

结果如下,

Traceback (most recent call last):
  File "<pyshell#140>", line 1, in <module>
    private_out.__private
AttributeError: module 'private' has no attribute '__private'

2 - 名字重写

无法访问私有属性的原因是:python对私有属性的名字进行了修改(重写) , 这样做的好处是:防止子类修改基类的属性或者方法. 现在,我们遍历dir( private )查看private的内置方法和属性:

for i in dir(private_out):
	print(i)

显示结果如下:

#结果如下:

_Private__private
__class__
__delattr__
__dict__
__dir__
__doc__
__eq__
__format__
__ge__
__getattribute__
__gt__
__hash__
__init__
__init_subclass__
__le__
__lt__
__module__
__ne__
__new__
__reduce__
__reduce_ex__
__repr__
__setattr__
__sizeof__
__str__
__subclasshook__
__weakref__

可以看到,python内部将私有__private修改成了' _Private_private ' (_类名__属性名) ,这就是我们无法直接访问私有属性或者方法的原因,那既然我们知道了这个原因,根据修改名便可以访问它了:

#结果如下:
private_out._Private__private
>>>521

3 -忠告

知道该原理便可,请不要尝试去直接访问它 , 既然人家这么设置肯定有它这么设置的理由,切不可'  鲁莽从事啊 '. 当然,你可以间接访问类中的私有方法或者属性,例如,

class Private():
	def __init__(self):
		self.__private = 521
	def getPrivatevalue(self):
		return self.__private
这样就可以正常访问类的私有方法或者属性了.


总结:python入门简单,精学不易,希望这篇文章对你有所帮助.


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们需要在派生中新增私有属性并重写基方法时,可以使用以下步骤: 1. 定义一个派生,并在定义的开头使用基名称和圆括号,以便将基与派生联系起来。 2. 在派生中定义一个新的私有属性。 3. 在派生中重写基方法,可以使用 super() 函数调用基方法,并在其基础上添加新的功能。 下面是一个示例代码,演示了如何在 Python 中实现派生私有属性和重写基方法: ```python class BaseClass: def __init__(self, name): self.name = name def display(self): print("BaseClass Name:", self.name) class DerivedClass(BaseClass): def __init__(self, name, age): super().__init__(name) self.__age = age # 新增私有属性 def display(self): super().display() # 调用基方法 print("DerivedClass Age:", self.__age) # 添加新功能 d = DerivedClass("Tom", 20) d.display() ``` 在这个例子中,我们创建了一个基 BaseClass,其中包含一个属性和一个方法。然后我们创建了一个派生 DerivedClass,它继承了 BaseClass,并添加了一个新的私有属性。最后,我们重写了基方法,并在其中添加了新的功能。 需要注意的是,在派生中新增私有属性时,需要在属性的名称前加上两个下划线,这样属性就变成了私有属性,只能在内部访问。另外,当我们重写基方法时,可以使用 super() 函数调用基方法,并在其基础上添加新的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值