Python 定义私有属性
2017-09-23 20:58
295 查看
Python没有类似于Java的
示例代码:
输出:
从上面的例子可以看出:
1.
2. 在class外部不能访问
3. 但是, 这只能防止无意间的调用, 不能防止恶意调用, 用Fluent Python的话来讲, 这是一种
private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以
__开头, 例如
__field.
示例代码:
class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = float(y) self.xx = x self.yy = y def get_x(self): return self.__x # 内部访问 if __name__ == "__main__": v = Vector2D(3, 4) print v.__dict__ print v._Vector2D__x, v.get_x()# 但是可以通过v._Vector2D__x 在外部访问 v.__x # 外部访问
输出:
{'yy': 4, 'xx': 3, '_Vector2D__x': 3.0, '_Vector2D__y': 4.0} 3.0 3.0 Traceback (most recent call last): ... v.__x AttributeError: 'Vector2D' object has no attribute '__x'
从上面的例子可以看出:
1.
__field被编译器重命名为
_className__field
2. 在class外部不能访问
obj.__field, 但在class内部可以
3. 但是, 这只能防止无意间的调用, 不能防止恶意调用, 用Fluent Python的话来讲, 这是一种
safety device, not security device, 用国语来讲, 就是
防君子不防xx, 因为可以通过
obj._className__field在外部访问
obj的私有
__field.
Reference
Fluent Python, Chapter 9相关文章推荐
- python 直接访问类的私有属性或方法
- 在Python中定义和使用 抽象类及抽象方法 抽象属性
- Python的伪私有属性
- js对象的继承以及公有私有属性的定义和读写
- python中类的定义、实例化、封装以及私有变量/方法
- python(类和对象之对象的私有属性)
- Python3基础 类的伪私有属性 __加变量名 的示例
- python中的属性定义与查找策略
- python基础===类的私有属性(伪私有)
- oc定义私有变量和私有属性
- Python的伪私有属性
- python之Class属性定义和访问
- iOS定义私有属性
- python中定义一个类 怎样对类里面的属性进行排序
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- python 类属性 实例属性 类属性只能添加给用户定义的类 不可以到内置类
- Python3 __dict__与dir()区别,对象中私有属性的访问
- Python面向对象私有属性及案例详解
- 洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性
- Python3 对象的私有属性