python 直接访问类的私有属性或方法
2017-11-11 19:29
531 查看
# 内容:直接访问类的私有属性或者方法 #
# 环境:py 3.6.2 #
1 - 访问类的私有属性或者方法.
首先我们定义一个包含私有属性的类
实例化并尝试访问__private私有属性,
结果如下,
2 - 名字重写
无法访问私有属性的原因是:python对私有属性的名字进行了修改(重写) , 这样做的好处是:防止子类修改基类的属性或者方法. 现在,我们遍历dir( private )查看private的内置方法和属性:
显示结果如下:
可以看到,python内部将私有__private修改成了' _Private_private ' (_类名__属性名) ,这就是我们无法直接访问私有属性或者方法的原因,那既然我们知道了这个原因,根据修改名便可以访问它了:
3 -忠告
知道该原理便可,请不要尝试去直接访问它 , 既然人家这么设置肯定有它这么设置的理由,切不可' 鲁莽从事啊 '. 当然,你可以间接访问类中的私有方法或者属性,例如,
总结: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入门简单,精学不易,希望这篇文章对你有所帮助.
相关文章推荐
- python直接访问私有属性的简单方法
- python直接访问私有属性的简单方法
- Python访问类的私有属性和私有方法的正确姿势
- python 对私有属性(方法)的访问 的函数
- Python的私有属性的特殊访问方法
- 子类会继承父类的私有方法和私有属性,只是不能直接访问
- python对象:访问私有属性和私有方法
- python进阶学习笔记(四)——python中访问限制、创建类属性、定义实例方法、定义类方法、类的继承
- 利用反射访问私有属性、调用私有方法
- python 私有属性和方法
- python类的动态方法是否可以访问到私有变量。
- JavaScript中的私有函数;Javascript构造函数的私有方法中访问其属性和公有方法
- Python 访问私有变量和私有方法
- java将属性设置为私有,在给其添加get/set方法和直接把属性设置成public有什么区别
- python魔法方法-属性访问控制详解
- java 私有属性加get/set方法跟直接把属性设置成public有区别吗?
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- PHP面向对象----(私有属性的访问方法)
- java利用反射访问类的私有(private)属性及方法
- JavaScript中的私有函数;Javascript构造函数的私有方法中访问其属性和公有方法