2017-07-04 6 views
0

I持って、次のクラス:は、どのように私はクラスプロパティを整数に変換します

if num <= temp_con.t - 2: 
    #dothing 

私が手しかし:私はこのロジック以下の数と比較するためにそれを使用する必要があります

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 

エラー:

Type error: unsupported operand type for -: 'property' and 'int'<

私はint(temp_con.t)getattr(temp_con, t)を試してみましたが、それらは動作しませんでした。

どのようにプロパティをintとして利用できますか?

+4

'return self.t 'は' 0'を返しません。これは 't'(これはプロパティゲッターです)を返します。属性とプロパティゲッターを区別する必要があります。 'self._t = 0'を設定する –

+1

この質問は、クラスのメンバーとクラスのインスタンスのメンバーの違いについて、複数の面で混乱しているようです。たとえば、 'temp_con'はクラスとして宣言されていますが、使用例では、' temp_con'もインスタンスであると予想される変数として使用されています。 –

+0

答えは最初の2つの回答の組み合わせです。 – drako234

答えて

5

ラップするプロパティと属性に別々の名前を使用する必要があります。良いコンベンションは、属性名として_という接頭辞が付けられたプロパティー名を使用することです。

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

CLASSのオブジェクトではなく、CLASSにアクセスしています。

試してください:あなたは、クラスのコードで定義したゲッター(およびセッター)をラップし、プロパティオブジェクトを返しますが、それはそれを実行doesntのtemp_con.tあなたのコードでは

q = temp_con() 
if num <= q.t - 2: 
    pass 

更新:(メモ:2回読む) コードに別の問題があります。最初(コードでは2番目ですが、最初に実行されます)、ゲッターtを定義し、後でself.t = 0で上書きします。結果として、(tとして)プロパティはクラスメンバーとしてアクセスでき(あなたの例では起こります)、オブジェクトのメンバーとして値0が得られます。

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を介してアクセスする必要があります試してみてください。

関連する問題