使用字符串的 class 的常规 setter

General setter for a class using strings

假设我有一个名为“Employee”的 class,它是一堆不同的属性。我可以创建一个通用的 getter ,它基本上会像这样根据其名称的字符串获取每个属性,但我不知道如何创建那种 setter 这样我就不必每次都做 employee1.age = 22 之类的事情。为每个属性创建多个 setter 会非常混乱。

class Employee:

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.address = "Somewhere"
        self.job = None

    def getter(self, name):
        return getattr(self, name, None)

    def setter(self, name, amount):
        pass

您可以使用 setattr() 并将其包装在您的 setter 方法中,如下所示:

    def setter(self, name, amount):
        return setattr(self, name, amount)

所以你可以这样称呼它

e = Employee("Albert", 169)
e.setter("age", 16)

当您现在检查 e.age 时,您会看到

>>> e.age
16

感谢 Joe Carboni 的回答,我设法创建了一个我想调用 ultimate_getter() 的函数。放在这里给大家用。

def ultimate_getter(obj, name, limit = 12):

    if name.count(".") == 0:
        return getattr(self, name, None)

    else:
        count = 0
        previous = None
        current = None
        previous = obj

        while name.count(".") > 0 and count < limit:
            index = name.find(".")
            previous = getattr(previous, name[0:index])
            name = name[index + 1:]
            count += 1

            if name.count(".") == 0:
                current = getattr(previous, name)

        return current

它基本上是 setattr() 的更高级版本,它可以遍历文本,因此您在想要使用某种嵌套 [=] 时不必多次使用 setattr() 18=].