如何将类属性转换为整数

时间:2017-07-04 21:57:17

标签: python class properties

我有以下课程:

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?

3 个答案:

答案 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访问它。