Python 私有字段的只读特性和可写特性

@property 在类中一般和私有字段一起使用。

类中如果有私有字段在外部是无法直接访问的,通过@property使其可读或可写。

经典类

经典类中的私有字段是可读可写的。(没有只读功能)

class Person:
    def __init__(self):
        self.__name = 'sate'

    @property
    def Name(self):
        return self.__name

p1 = Person()
print p1.Name           #通过@property 可读。
p1.Name = 'zheng'       #可写
print p1.Name

新式类

新式类中的私有字段是只读,不可写,如果要可写,需要再创建一个被@xxx.setter修饰的特性。

如果想设置为外部只读或者外部可写特性,可使用如下方法:

# coding=utf-8

class Class_1(object):
    def __init__(self, name, age):
        self.name = name
        # 定义一个私有字段age,外部无法直接访问
        self.__age = age

    def read_name(self):
        print 'my name is %s ' % self.name

# 外部无法访问,但是可以通过内部访问到。
    def read_age(self):
        print 'my age is %s' % self.__age

# 使用属性方法将age()方法变为一个类的静态属性。使之变为可读属性。
    @property
    def age(self):
        return self.__age

# 使__age私有字段变成可写,只需调用age属性并直接赋值即可(装饰器格式为‘@函数名.setter’)
# 如果私有变量要设置为只读不可写,则直接去除本段即可。
    @age.setter
    def age(self, value):
        self.__age = value

cla = Class_1('sate', 12)

# 读取正常字段
cla.read_name()

# 调用方法读取__age私有字段
cla.read_age()

# 使用属性方法读取__age私有字段
print cla.age

# 更改类中的__私有字段
cla.age = 18
print cla.age

# 结果==>
my name is sate 
my age is 12
12
18

你可能感兴趣的:(Python 私有字段的只读特性和可写特性)