Python中__init__的调用setter



我有一个这样的类:

class Ticket:
def __init__(self, ticket):
self._subject = ticket.subject
self._oem = self.oem()

@property
def oem(self):
return self._oem
@oem.setter
def oem(self):
#set oem value by extracting it from subject using regex
self._oem = re.findall('<OEM: (.*?)>', self._subject)[0].strip()

但是,在创建对象时,

obj = Ticket(test_ticket)

我得到一个错误,

AttributeError: 'Ticket' object has no attribute '_oem'

我看过类似的问题,但他们问的和我不一样。我想在__init__方法中设置oem的值,通过使用前一个变量的值,而不是通过从外部传递值。

如何解决这个问题?

属性设置器需要接受一个值,它将在赋值给属性时被调用,例如

t = Ticket()
t.oem = value  # this would call call Ticket.oem(t, value)

如果这个属性只使用来自self._subject的数据,那么根本不要写setter。相反,将该属性设置为动态计算的只读属性,如下所示:

class Ticket:
def __init__(self, ticket):
self._subject = ticket.subject

@property
def oem(self):
return re.findall('<OEM: (.*?)>', self._subject)[0].strip()

相关内容

  • 没有找到相关文章

最新更新