我创建了一个class String()
with __get__()
, __set__()
,和一个方法to_db()
;然而,当我这样做时name = String()
,我做不到self.name.to_db()
因为它在召唤to_db()
关于返回的值__get__()
,而不是对象”name
".
class String(object):
def __init__(self, value=None):
if value:
self.value = str(value)
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = str(value)
def to_db(self):
return {'type':'string', 'value': self.value}
class Example(object):
name = String()
age = Integer()
def __init__(self,name,age):
self.name = name
self.age = age
def save():
data = dict(name=self.name.to_db(), age=self.age.to_db())
db.save(data)
解决这个问题的一种方法是不调用self.name.to_db()
直接设置一个标志instance
并创建一个条件__get__()
检查并致电to_db()
如果它是True
,但这看起来很笨拙。有没有更好的办法?
另外,我对描述符很陌生——使用的优点/缺点是什么instance
and/or instance.__dict__
存储状态与存储状态self
?
这非常简单 - 只需让您的描述符返回带有您想要的额外方法的字符串子类即可。
def __get__(self, instance, owner):
class TaggedString(str):
def to_db(self):
return {'type':'string', 'value': self}
return TaggedString(self.value)`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)