首先写上代码,我们代码,我们对里面的 Property Decorators 进行讲解。
class Person:
def __init__(self, first, last):
self.first = first
self.last = last
@property
def email(self):
return '{}.{}@email.com'.format(self.first, self.last)
@property
def fullname(self):
return '{} {}'.format(self.first, self.last)
@fullname.setter
def fullname(self, name):
self.first, self.last = name.split(' ')
@fullname.deleter
def fullname(self):
print('Delete Name!')
self.first = None
self.last = None
emp_1 = Person('John', 'Smith')
emp_1.fullname = "Corey Schafer"
print(emp_1.first)
print(emp_1.email)
print(emp_1.fullname)
del emp_1.fullname
输出:
Corey
Corey.Schafer@email.com
Corey Schafer
Delete Name!
@property
将方法(method)转化为属性(attribute )。
例如:
@property
def email(self):
return '{}.{}@email.com'.format(self.first, self.last)
如果不加上@property
,这时print(emp_1.email)
会报错,需要改成print(emp_1.email())
@fullname.setter
类似java里的setter。
@fullname.setter
def fullname(self, name):
self.first, self.last = name.split(' ')
在加上这一段代码后,只需要更改fullname,那么first, last, email都会自动改变,不需要全部重新赋值。
如果不加这一段代码,输出会变成:
John
John.Smith@email.com
Corey Schafer
Delete Name!
@fullname.deleter
字面意思,删除这一属性并设置first和last为None。
@fullname.deleter
def fullname(self):
print('Delete Name!')
self.first = None
self.last = None