如何在Python中动态更新对象属性

2024-10-17 06:14:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个具有2个输入属性和1个输出属性的类,这样每当修改其中一个输入属性时,输出属性就会自动修改

我曾尝试将属性定义为构造函数内外的实例变量,但无论是哪种情况,在实例化对象之后,输出属性都保持在实例化时设置的值上

class Example():

    def __init__(self,n):
        self.name=n

    inA=1
    inB=1

    if inA==1 and inB==1:
        outA=1
    else:
        outA=0

实例化时,outA按预期设置为1 但如果我尝试更新: object.inA=0你知道吗

你知道吗对象.outA仍然是1,而我需要它被更新为0

尽可能避免使用函数。对于python和OOP来说是个新手,如果这个问题毫无意义或者有一个明显的答案,那么很抱歉


Tags: 对象实例nameselfif属性定义init
3条回答

你想让它返回你的输出吗?你知道吗

扩展U9 Forward的答案:

class Example():

    def __init__(self,n):
        self.name = n
        self.inA = 1
        self.inB = 1

    def f(self):
        return self.inA and self.inB

您可以在类中创建一个函数和一些其他小更改:

class Example():

    def __init__(self,n):
        self.name=n
        self.inA=1
        self.inB=1

    def f(self):
        if self.inA==1 and self.inB==1:
            self.outA=1
        else:
            self.outA=0

称之为:

a = Example('foo')
a.inA = 0
a.f()
print(a.outA)

输出:

0

如你所见,取出:

a.f()

行将使它给出一个错误:

AttributeError: 'Example' object has no attribute 'outA'

如果需要依赖于其他实例属性的实例属性,则可以使用属性。你知道吗

class Example:
    def __init__(self, n):
        self.name = n
        self.inA = 1
        self.inB = 1

    @property
    def outA(self):
        return self.inA and self.inB

您可以像访问常规实例属性outA一样访问obj.outA。你知道吗

>>> my_obj = Example("example")
>>> my_obj.outA
1

更改属性inAinB会影响outA。你知道吗

>>> my_obj.inA = 0
>>> my_obj.outA
0

相关问题 更多 >