Python中私有属性的定义⽅式
Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field.
⽰例代码:
class Vector2D(object):
def __init__(self, x, y):
self.__x = float(x)
self.__y = float(y)
< = x
< = 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.
补充知识:python中私有属性和私有⽅法,修改私有属性的值
如果⼀个属性是以两个下划线开始就标识这个这个属性是⼀个私有属性
self.__money = 1000000
如果⼀个⽅法是以两个下划线开始也代表已经私有
⼦类继承了⽗类如果⽗类的属性私有将不会被⼦类继承
私有属性和私有⽅法可以在类的⾥⾯使⽤
⾃定义类中如果⼀个属性进⾏了私有在类的外⾯不能调⽤
修改私有属性的值
如果需要修改⼀个对象的属性值,通常有2种⽅法
对象名.属性名 = 数据 ----> 直接修改
对象名.⽅法名() ----> 间接修改
私有属性不能直接访问,所以⽆法通过第⼀种⽅式修改,⼀般的通过第⼆种⽅式修改私有属性的值:定义⼀个可以调⽤的公有⽅法,在这个公有⽅法内访问修改。
class Person(object):
def __init__(self):
self.name = "⼩明"
self.__age = 20
#获取私有属性的值
def get_age(self):
return self.__age
#设置私有属性的值
def set_age(self, new_age):
self.__age = new_age
#定义⼀个对象
p = Person()
#强⾏获取私有属性
#崇尚⼀切靠⾃觉
print(p._Person__age)
print(p.name)
#想在类的外⾯获取对象的属性
ret = p.get_age()
print(ret)
numpy教程pdf#想在类的外⾯修改对象私有属性的值
p.set_age(30)
_age())
以上这篇Python中私有属性的定义⽅式就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论