我可以通过将属性作为变量传递给方法来修改属性吗?-蟒

Can I modify an attribute by passing it as variable to a method? - python

提问人:Alex fulleda 提问时间:10/10/2023 更新时间:10/10/2023 访问量:47

问:

所以我有一个带有属性的类,比如 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 或重复方法)?

Python 方法 属性

评论

0赞 Axe319 10/10/2023
听起来您只需要一个顶级函数,它接受 1 个或多个参数和一个值。这将是最可重用和可测试的方法。return
0赞 user3840170 10/10/2023
这回答了你的问题吗?如何通过引用传递变量?

答:

0赞 nate-thegrate 10/10/2023 #1

在 Python 中,s 是不可变的。运行时,Python 不会修改内存中指向的值,它只是指向不同的值。intx += 1xx

考虑到这一点,有几种方法可以进行此实现。您从 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