在python中生成类的属性
我正在学习python食谱。 我正在尝试执行python手册第8章中的以下代码。 这段代码是关于类的属性的在python中生成类的属性,python,Python,我正在学习python食谱。 我正在尝试执行python手册第8章中的以下代码。 这段代码是关于类的属性的 class Person: def __init__(self, first_name): self.first_name=first_name #getter function #property def first_name(self): return self._first_name #settier f
class Person:
def __init__(self, first_name):
self.first_name=first_name
#getter function
#property
def first_name(self):
return self._first_name
#settier function
def first_name(self, value):
print(value, isinstance (value,str))
if not isinstance(value, str):
raise TypeError("expected a string")
self._first_name=value
#deleter function
def first_name(self):
raise AttributeError("can not delete attribute")
c=Person('PETTER')
c.first_name(42)
创建类之后,我创建了实例,故意输入了错误的值
我以为我得到了TypeError(应该是字符串)。
但我没有。
我的代码的哪一部分应该更改?我想你忘记了一些内容,特别是:
def first\u name(self)上方的@property
:
@first\u name.setter
以上def first\u name(self,value):
@first\u name.deleter
位于第二个定义first\u name(self):
下面的代码将给出您预期的错误 两个主要问题:
\uuuu init\uuuu
中有self.first\u name=first\u name
。这最终会覆盖函数first\u name
。你的意思是self.\u first\u name=…
first\u name
)。Python没有函数重载,所以您不能这样做。我相信最后一个定义会赢。下面我注释掉了两个函数,我认为您实际上并不打算调用它们正如其他答案所指出的,根据问题的上下文,您可能将通过
@property
装饰器将名字
变成实际的属性。这可能是使代码正常工作的更好方法,但希望这能帮助您了解现有代码中发生的情况。您缺少@property和@setter的装饰功能
class Person:
def __init__(self, first_name):
self.first_name=first_name
@property
def first_name(self):
return self._first_name
@first_name.setter
def first_name(self, value):
print(value, isinstance (value,str))
if not isinstance(value, str):
raise TypeError("expected a string")
self._first_name=value
属性示例
class Temp:
def __init__(self,x):
self.x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
self.__x = x
有关的详细信息,我投票将这个问题作为离题题结束,因为这不是我的答案。com@junghyeminwlcm
class Temp:
def __init__(self,x):
self.x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
self.__x = x