我想使用一个类方法,根据方法参数确定要修改的属性。这是一个非常简单的类似版本:
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.a
或self.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)
这是在操作hasattr
、setattr
和getattr
内置。
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