@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