在 Python 中从 __init__ 调用 setter
call setter from __init__ in Python
我有一个 class 这样的:
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 的值,方法是使用前一个变量的值,而不是从外部传递值。
如何解决这个问题?
A 属性 setter 需要接受一个值,它会在分配给属性时调用,例如
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()
我有一个 class 这样的:
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 的值,方法是使用前一个变量的值,而不是从外部传递值。
如何解决这个问题?
A 属性 setter 需要接受一个值,它会在分配给属性时调用,例如
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()