在__init__. js中使用python属性



我有一个使用几个属性()的类。修改文本的字体、大小或字符串等。将需要重新渲染一个表面来缓存。

init内部调用类自己的属性()的推荐方法是什么?问题是变量没有设置,在我想调用@property DrawText.text 的时候

如果我直接设置。_text,它会运行:

class DrawText(object):
    """works, Except ignores text.setter"""
    def __init__(self):
        # self.text = "fails" # would fail if here
        self._text = "default"
        self.text = "works"
    @property 
    def text(self):
        '''plain-text string property'''
        return self._text
    @text.setter
    def text(self, text):
        if self._text == text: return       
        self._text = text
        self.dirty = True # .. code re-creates the surface

这也运行,并且更接近,,但它将工作与多个实例,使用不同的数据?

class DrawText(object):
    """works, Except ignores text.setter"""
    def __init__(self):
        DrawText.text = "default"
        self.text = "works"
    @property 
    def text(self):
        '''plain-text string property'''
        return self._text
    @text.setter
    def text(self, text):
        if self._text == text: return       
        self._text = text
        self.dirty = True # .. code re-creates the surface

text属性中,您可以这样写:

try:
    return self._text
except AttributeError:
    self._text = None
return self._text

则不需要在实例化前(或实例化后)设置任何内部属性。

第一次调用setter时,由于后备字段self._text尚未定义,因此失败

简单地在类级别初始化它:

class DrawText(object):
    _text = None
    # your code here

另一种解决方案(在您的情况下)是简单地手动设置属性的后备字段和脏标志,因为新对象无论如何都可能被认为是脏的。

相关内容

  • 没有找到相关文章

最新更新