提问人:Alex fulleda 提问时间:10/10/2023 更新时间:10/10/2023 访问量:47
我可以通过将属性作为变量传递给方法来修改属性吗?-蟒
Can I modify an attribute by passing it as variable to a method? - python
问:
所以我有一个带有属性的类,比如 a,我希望能够使用方法修改它,但我希望该方法可以与其他属性重用。
例:
class My_Class():
def __init__(self):
self.a = 0
self.b = 1
def add_one(self, x):
x = x + 1
def add_to_all(self):
self.add_one(self.a)
self.add_one(self.b)
使用上面的代码,我希望:
adder = My_Class()
print(adder.a)
# 0
adder.add_to_all()
print(adder.a)
#1
这是行不通的,我想知道如何才能做我想要的事情。
ChaGPT 建议:
class My_Class():
def __init__(self):
self.a = 0
self.b = 1
def add_one(self, x):
setattr(self, x, getattr(self, x) + 1)
def add_two(self):
self.add_one('a')
self.add_one('b')
这有效,但我不妨创建两种方法:
def add_a(self):
self.a = self.a + 1
def add_b(self):
self.b = self.b + 1
并且会重复代码,但在我看来它会更干净(这种情况只将 1 添加到变量中,但在我的实际问题中,每个方法中都有许多变量和复杂的操作,a 和 b)。
知道是否有另一种方法可以实现这一点或使用哪个选项(chatGPT 或重复方法)?
答:
0赞
nate-thegrate
10/10/2023
#1
在 Python 中,s 是不可变的。运行时,Python 不会修改内存中指向的值,它只是指向不同的值。int
x += 1
x
x
考虑到这一点,有几种方法可以进行此实现。您从 ChatGPT 获得的解决方案可能是最直接的,但这里有另一种有效的方法:
class My_Class:
def __init__(self):
self.values = [0, 1]
@property
def a(self):
return self.values[0]
@property
def b(self):
return self.values[1]
def add_to_all(self):
self.values = [val + 1 for val in self.values]
这也将完成您想要的目标,尽管如果您还希望能够设置 a 和 b 的值(即),您还需要添加 setter 方法。self.a = 3
评论
return