gpt4 book ai didi

python - 是否可以根据某种属性自动生成 getter 和 setter 函数?

转载 作者:行者123 更新时间:2023-12-01 06:36:07 27 4
gpt4 key购买 nike

我有一个“用户”类,它有数百个属性,我不确定是否最好使用一个类,并且必须手动创建数百个 getter 和 setter,它们只是将值设置为字典中的键或直接用字典就可以了。拥有 getter 和 setter 似乎是抽象属性内部表示的最佳方式,这样我就可以从字典更改为以后需要的任何内容,我只是不想公开这些键,以防它们需要更改。

例如,我们在 foo 类中有一些属性:

class User(object):
attributes = {"fname": None,"lname": None,}

我想要一些东西让您调用 get_fname() 并让它返回 fname 的值或 get_lname() 并让它设置 lname 的值,而无需定义函数。与 setter 相同,set_fname(value) 将设置 fnames 值等。我不确定这是否可能,或者我是否只是过度思考问题而错过了一个简单的解决方案。

最佳答案

您可以简单地定义类中的所有属性。每个实例似乎都将所有类变量作为成员(默认值),如果为任何特定实例上的属性设置了值,它将更新实例 __dict__ 而不是类__dict__

class User(object):
fname = ''
mname = ''
lname = ''

def __init__(self, **kwargs):
self.__dict__.update(kwargs)

user1 = User(fname='Foo', lname='Bar')
user2 = User(lname='Public', fname='John')
user2.mname = 'Q'

print(f"{user1.fname} {user1.mname} {user1.lname}") # prints "Foo Bar"
print(f"{user2.fname} {user2.mname} {user2.lname}") # prints "John Q Public"

正如其他评论所说,如果可能的话,最好避免在单个对象中包含如此多的变量,并且具有显式的 getter 和 setter 是不符合 Python 风格的。
如果您需要 getter 和/或 setter,您可以稍后在需要时添加它们; Java 不会让你这样做,但 Python 会。

关于python - 是否可以根据某种属性自动生成 getter 和 setter 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59657118/

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