我有这样的课:
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句