我们知道,类中的私有变量是不能直接在类外访问或修改的,因此我们可以设置一个get
函数和一个set
函数来间接访问和修改私有属性,那么每次访问和修改的都需要调用函数,有没有更简单的方法呢?下面介绍两种方法:
1. property
(属性函数)
比如People
类中有一个实例私有化变量__age
,我们设置两个函数get_age()
和set_age()
分别用来访问和修改age
,那么我们可以再定义一个类变量age
并执行以下语句:
age = property(get_age,set_age)
此时我们就可以通过外部直接访问类变量age
来间接访问实例私有化变量,完整代码如下:
class Person(object):
def __init__(self):
self.__age = 18 # 定义一个私有化属性,属性名字前加连个 __ 下滑线
def get_age(self): # 访问私有实例属性
return self.__age
def set_age(self,age): # 修改私有实例属性
if age < 0:
print('年龄不能小于0')
else:
self.__age = age
age = property(get_age,set_age) # 定义一个属性,当对这个age设置值时调用set_age,
# 当获取值时调用get_age
# 注意:必须是以get,set开头的方法名,才能被调用
xiaoming = Person()
xiaoming.age = 15
print(xiaoming.age)
- 我们可以用装饰器的方法访问:
具体操如下:
class Person(object):
def __init__(self):
self.__age = 18 # 定义一个私有化属性,属性名字前加连个 __ 下滑线
@property # 使用装饰器对age进行装饰,提供一个getter方法
def age(self): # 访问私有实例属性
return self.__age
@age.setter # 使用装饰器进行装饰,提供一个setter方法
def age(self, age): # 修改私有实例属性
if age < 0:
print('年龄不能小于0')
else:
self.__age = age
xiaoming = Person()
xiaoming.age = 15
print(xiaoming.age)
注意访问和修改两个函数的名称都为之后再函数外部访问私有变量的一个特殊名称,如函数名为age
,那么类外就通过age
来间接访问这个私有变量,并且无论是get
还是set
函数都命名为age
。