Rumah > Soal Jawab > teks badan
Cookbook 8.6节有个例子:
http://chimera.labs.oreilly.com/books/1230000000393/ch08.html#_problem_124
class Person:
def __init__(self, first_name):
self.first_name = first_name
# Getter function
@property
def first_name(self):
return self._first_name
# Setter function
@first_name.setter
def first_name(self, value):
if not isinstance(value, str):
raise TypeError('Expected a string')
self._first_name = value
# Deleter function (optional)
@first_name.deleter
def first_name(self):
raise AttributeError("Can't delete attribute")
有个问题是,为什么__init__里面的是self.first_name而不是self._first_name,他说是
In this example, the entire point of the property is to apply type checking when setting an attribute. Thus, chances are you would also want such checking to take place during initialization. By setting self.first_name, the set operation uses the setter method (as opposed to bypassing it by accessing self._first_name).
我看不明白,求解释一下,多谢
阿神2017-04-17 14:22:41
__init_
_里进行初始化 来给first_name赋值
这里使用的self.first_name
是因为要使用@first_name.setter
def first_name(self, value):
如果直接使用self._first_name
那么就不会进入@first_name.setter
def first_name(self, value):
也就没有if not isinstance(value, str):
raise TypeError('Expected a string')
的类型检查。