私はpythonプロパティの純粋なpython実装を探して、初期化の仕組みを理解しています。私は、記述子インターフェイス(が、がになる)を扱っているものの多くは見つけましたが、setterメソッドまたはdeleterメソッドについては説明していません。 this(大体)実装されていますか?setterを使ったPythonカスタムプロパティ
2
A
答えて
1
プロパティは、単純で直接的な記述子です。記述子プロトコルは、__get__
,__set__
および__delete__
の3つのメソッドで構成されています。これらの操作のそれぞれのプロパティは、単にユーザー提供の関数を呼び出します。
class my_property(object):
def __init__(self, getter, setter, deleter):
self.getter = getter
self.setter = setter
self.deleter = deleter
def __get__(self, instance, owner):
return self.getter(instance)
def __set__(self, instance, value):
self.setter(instance, value)
def __delete__(self, instance):
self.deleter(instance)
class Foo(object):
def __init__(self):
self._x = 42
def get_x(self):
print 'getter'
return self._x
def set_x(self, value):
print 'setter'
self._x = value
def del_x(self):
print 'deleter'
del self._x
x = my_property(get_x, set_x, del_x)
obj = Foo()
print obj.x
obj.x = 69
del obj.x
print obj.x
0
コメント:Pythonリストオブジェクトにプロパティを追加する簡単な方法があります。クラスでのワープ。
>>> class Foo(list): pass
>>> l = Foo([1,2,3])
>>> l.foo = 'bar'
>>> l
[1, 2, 3]
関連する問題
- 1. python @property setter delegation
- 2. エンティティフレームワークを使用したカスタムプロパティ
- 3. pythonプロパティgetter/setter confusion
- 4. setterとgetterを使ったヌルオブジェクト参照SAXParser Android
- 5. カスタムプロパティを使用したSpringロギング設定
- 6. Xamarinを使用したCALayerカスタムプロパティのアニメーション
- 7. Pythonを使用してvtkXMLUnstructuredGridにカスタムプロパティを追加
- 8. Pythonカスタムプロパティ/メタデータをファイルに追加
- 9. POJOのsetterをjava.lang.reflect.Methodを使って設定します
- 10. カスタムプロパティ
- 11. Python - Javascriptを使ったログインフォーム
- 12. maxtasksperchildを使ったPythonマルチプロセッシング
- 13. Pythonスクリプトを使ったゲームエンジン?
- 14. Pythonを使ったインタラクティブビデオ
- 15. RubyPythonを使ったPythonモジュール
- 16. Pythonを使ったWeb Scraping
- 17. Pythonを使ったTTFグリフレンダリング
- 18. サブフォルダを使ったPythonユニットテスト
- 19. pythonを使ったディレクトリチェックサム?
- 20. Networkx(Python)を使ったグラフトラバーサル
- 21. Pythonを使ったネットワークスニッフィング
- 22. Pythonを使った順列
- 23. ジンジャーを使ったPythonクイズ
- 24. Pythonサブプロセスを使ったタイムアウト
- 25. スレッドを使ったPython MP3Play
- 26. サブキーを使ったPython winreg
- 27. pythonを使ったWeb /ネットワークプログラミング
- 28. Pythonを使ったトラブルsuper
- 29. pythonを使ったgit push
- 30. mongoを使ったpythonクエリ
私はセッターメソッド(property.setter)の実装方法に興味があります。 – Hernan
@Hernan: 'fset'を変更して' self'を返します(あるいは、おそらく自分自身のコピーを返します、私は本当に覚えていません)。ロケット科学は関与していません。 –
それは私が思ったものですが、私が投稿に入れたリンクでは、プロパティからサブクラス化してprint(args、kwargs)を__init__に追加したクラスの操作を見て、プロパティを再作成しているようですfsetを変更するだけではありません。これは事実ですか?何故ですか? – Hernan