gpt4 book ai didi

python - 如何在 Python 类描述符对象上调用方法?

转载 作者:太空狗 更新时间:2023-10-30 02:49:53 24 4
gpt4 key购买 nike

我创建了一个 class String()__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 的优点/缺点是什么?和/或 instance.__dict__存储状态与将其存储在 self 中?

最佳答案

这很简单 - 只需让您的描述符返回一个带有您想要的额外方法的字符串子类。

def __get__(self, instance, owner):
class TaggedString(str):
def to_db(self):
return {'type':'string', 'value': self}
return TaggedString(self.value)`

关于python - 如何在 Python 类描述符对象上调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com