class String()
with __get__()
、__set__()
、および methodを作成しました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)
これに対処する 1 つの方法は、self.name.to_db()
直接呼び出すのではなく、フラグを設定しinstance
て条件付きを作成し、__get__()
それをチェックしてそれが でto_db()
あるかどうかを呼び出すことですTrue
が、これは扱いにくいようです。より良い方法はありますか?
また、私は記述子に不慣れです-状態を使用instance
および/またはinstance.__dict__
保存することと、状態を保存することの長所/短所はself
何ですか?