在 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()