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

标签 python function

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

相关文章:

javascript - JavaScript 如何使新页面包含更多 JavaScript?

C++ 指向函数的指针,初学者问题

php - 将函数传递给 CodeIgniter 中的 View ?

python - 如何将 lambda 函数应用于 pandas 数据框中的某些行并创建新列

python - Django 管理中的富文本编辑器 - 隐藏更改列表中的 HTML 标记

function - 状态 : 503 Service Unavailable Azure Function

PHP "Undefined Function"即使它实际上在同一个文件中

python - 根据 OpenApi 3 .yml 架构验证 DRF 响应

python - 使用 itertools.permutation where r > n

python - 计算四边形的面积