我有一个“用户”类,它有数百个属性,我不确定是否最好使用一个类,并且必须手动创建数百个 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/