0

ここに私のコードがあります:

def createProp(fget, fset, fdel):

    class prop(object):
        get=property(fget,fset,fdel)

    return prop().get
x=createProp(getter,setter,deleter)

私がやりたいのは、プロパティを返して、変数 xa プロパティを作成できるようにすることですが、このような関数を作成する方法がわかりません。代わりに行っているのは、プロパティ自体ではなく、プロパティの値を返すことです。

パイソン2.6

4

1 に答える 1

4
createProp = property

プロパティは完全に普通のオブジェクトです。propertyは単なる別のクラスです。実行時に、必要なコンテキスト (クラスは不要) でそのインスタンスを作成し、それらを渡すことができます。そして、(無意味に) ローカル クラスでインスタンスを作成し、そこからフェッチすることもできます。しかし、プロパティの要点はインスタンスの属性アクセスをオーバーライドしているため、クラスから取得する必要があります: return prop.get.

ただし、記述子プロトコルpropertyによってその魔法が機能するため、記述子は機能するクラスに存在する必要があります。プロパティであるグローバル(またはローカル)変数を持つことはできません-まあ、できますが、それを使用すると、 runではなく記述子オブジェクトが与えられ、代入はトリガーされません。そのようなことはできませんし、すべきではありません。fgetfset

于 2012-04-30T17:58:27.973 に答える