是否可以使变量成为对 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,因为类属性实际上没有被修改,只是变量variable。我可以将增量定义为:

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

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

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

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)

这是在操作hasattrsetattrgetattr内置。

hasattr需要 2 个参数。对象,随self一起传入,属性名称作为字符串。

getattr采用相同的 2 个参数。

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

如果你有一个完整的字母表,那么26个(给予或接受(个人属性是错误的方法。使用dict.

class Data:
def __init__(self):
self.data = dict.fromkey("abcdefghijklmnopqrstuvwxyz", 1)
def incrementself, c):
self.data[c] += 1

最新更新