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

时间:2019-05-14 03:12:34

标签: python python-3.x

我想创建一个具有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

object.outA保持为1,而我需要将其更新为0

尽可能避免使用功能。 python和OOP的新手,如果这个问题没有道理或有明显的答案,抱歉!

3 个答案:

答案 0 :(得分:5)

如果您希望实例属性依赖于其他实例属性,则可以使用属性。

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

答案 1 :(得分:0)

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

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'

答案 2 :(得分:0)

您要它返回输出吗?

扩展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