首页 > 解决方案 > 是否可以在 Python3 中使变量成为对类属性的引用?

问题描述

我想使用一个类方法来确定根据方法参数修改哪个属性。这是一个非常简单的类似版本:

class Data:

    def __init__(self):
        self.a = 1
        self.b = 1

    def increment(self, a_or_b):

        variable = {'a': self.a, 'b': self.b}[a_or_b]
        variable += 1

d1 = Data()
d1.increment(a_or_b='a')
print(d1.a)

我想d1.a等于 2,但它等于 1,因为 class 属性实际上没有被修改,只是 variable variable。我可以改为将增量定义为:

def increment(self, a_or_b): 
    if a_or_b is 'a': 
        self.a += 1
    else: 
        self.b += 1 

但这感觉很麻烦,特别是如果我想要整个字母表而不仅仅是前两个字母。有没有办法改为variable引用任何一个self.aself.b这样的属性来修改属性?

标签: python-3.xoopmethodsattributes

解决方案


您可能不应该这样做,但这里有一个选项。

class Data:

    def __init__(self):
        self.a = 1
        self.b = 1

    def increment(self, a_or_b):
        if hasattr(self, a_or_b):
            setattr(self, a_or_b, getattr(self, a_or_b) + 1)


d1 = Data()
d1.increment('a')
print(d1.a)

这是在操作hasattr,setattrgetattrbuiltins。

hasattr需要 2 个参数。用 传入的对象,self以及作为字符串的属性名称。

getattr采用相同的 2 个参数。

setattr需要一个额外的参数。您希望为其设置的值。


推荐阅读