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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章