我想创建一个具有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的新手,如果这个问题没有道理或有明显的答案,抱歉!
答案 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
更改属性inA
和inB
会影响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