我有以下课程:
class temp_con():
def __init__(self):
self.t = 0
@property
def t(self):
return self.t
@t.setter
def t(self,value):
self.t = value
我需要用它来比较遵循这个逻辑的数字:
if num <= temp_con.t - 2:
#dothing
然而我收到错误:
类型错误: - :&#39; property&#39;不支持的操作数类型和&#39; int&#39;&lt;
我尝试了int(temp_con.t)
和getattr(temp_con, t)
,但这些都没有用。
如何将该属性用作int?
答案 0 :(得分:6)
您需要为属性及其包装的属性使用单独的名称。一个好的约定是使用前缀为_
的属性名称作为属性名称。
class TempCon:
def __init__(self):
self._t = 0
@property
def t(self):
return self._t
@t.setter
def t(self, value):
self._t = value
然后,您可以在类的实例上访问该属性。
temp_con = TempCon()
print(temp_con.t)
temp_con.t = 5
print(temp_con.t)
答案 1 :(得分:1)
您正在访问CLASS,而不是CLASS的OBJECT。
尝试:
q = temp_con()
if num <= q.t - 2:
pass
在你的代码中,temp_con.t返回属性对象,它包含你在类代码中定义的getter(和setter),但它不会执行它。
更新:(备忘录:阅读两次)
您的代码还有另一个问题。首先(好吧,它是代码中的第二个,但它会首先发生)你定义了getter t
,然后你用self.t = 0
覆盖了它。因此,您将获得(作为t
)属性作为类成员(在您的示例中发生)和值0
作为对象的成员。
答案 2 :(得分:0)
您需要该类的实例才能使用该属性,并且如其他答案所指出的,您需要为对象变量使用不同的名称。尝试:
class temp_con():
def __init__(self):
self._t = 0
@property
def t(self):
return self._t
@t.setter
def t(self,value):
self._t = value
my_temp_con = temp_con()
if num <= my_temp_con.t - 2:
pass
因此,要访问属性的值而不是属性函数,您必须通过my_temp_con.t
访问它。