0

したがって、次のコードがあります。クラスの属性に、ある種のメタデータを追加しようとしています。私の考えは、ゲッターがfloat / int / stringプライベート変数を返すが、詳細な名前などの追加のデータを返すゲッター/セッターを用意することでした。

これは、セッターを使用するまでは完全に機能します。セッターは、一度使用するとセッターとゲッターを無視するようです。

私がしていることがうまくいかない理由を誰かが知っていますか?または、私がやろうとしていることを実行するためのより良い方法がある場合はどうなりますか?

どうもありがとう!

class Param(float):
    def __new__(self,name,value):
        return float.__new__(self,value)

    def __init__(self,name,value):
        self.__name = name

    name = property(lambda self: self.__name)


class Beer:
    def __init__(self, temp):
        self.__T = temp

    @property
    def temp(self):
        return Param('Beer Temperature', self.__T)

    @temp.setter
    def temp(self,value):
        self.__T = float(value) 


print b.temp.name, b.temp.__class__

print b.temp * 4.5

print b.temp.name, b.temp.__class__

b.temp = 101

print b.temp.name, b.temp.__class__
4

1 に答える 1

5

Python 2では、プロパティは新しいスタイルのクラス(から派生object)でのみ正しく機能します。

class Beer(object):
    def __init__(self, temp):
        self.__T = temp

    @property
    def temp(self):
        return Param('Beer Temperature', self.__T)

    @temp.setter
    def temp(self,value):
        self.__T = float(value) 
于 2013-02-05T01:26:44.170 に答える