python中init和属性_在__init__中使用python属性?

我有一个使用几个property()的类.修改文本的字体,大小或字符串等将需要重新渲染表面以进行缓存.

在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

然后,在实例化之前(或之前)不需要设置任何内部属性.

标签:python,properties

来源: https://codeday.me/bug/20190626/1296427.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值