私は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プロパティgetter/setter confusion
- 2. エンティティフレームワークを使用したカスタムプロパティ
- 3. setterとgetterを使ったヌルオブジェクト参照SAXParser Android
- 4. POJOのsetterをjava.lang.reflect.Methodを使って設定します
- 5. サブキーを使ったPython winreg
- 6. maxtasksperchildを使ったPythonマルチプロセッシング
- 7. pythonを使ったWeb /ネットワークプログラミング
- 8. pythonを使ったディレクトリチェックサム?
- 9. tkinterを使ったpythonシステムトレイ
- 10. Pythonを使ったネットワークスニッフィング
- 11. side_effectを使ったPythonパッチオブジェクト
- 12. サブフォルダを使ったPythonユニットテスト
- 13. Networkx(Python)を使ったグラフトラバーサル
- 14. Pythonスクリプトを使ったゲームエンジン?
- 15. RubyPythonを使ったPythonモジュール
- 16. Python - Javascriptを使ったログインフォーム
- 17. カスタムプロパティを使用したEntity Frameworkの部分クラスの使用
- 18. Pythonを使ってUnicodeを使ったXMLによるdiff
- 19. カスタムプロパティMAPI_E_OBJECT_CHANGED
- 20. ダイナミック/カスタムプロパティ
- 21. pythonを使ったPythonパッケージのインストールまたはreposのeasy_install
- 22. getter/setter vs "tell、do not ask"を使う?
- 23. ドット構文を使用するためのコンパイラエラー "setter method needed" - setterが定義されています
- 24. PythonのRegExを使った関数パーサー
- 25. リストを使ったPython forループ
- 26. Amazon EC2でphpを使ったPythonスクリプト
- 27. Pythonを使ったインタラクティブな入出力
- 28. TextIOWrapperを使ったpython zipfileモジュール
- 29. PythonとSQLを使ったスコアボード
- 30. シンプルなWebラッパーを使ったpython tkinter
私はセッターメソッド(property.setter)の実装方法に興味があります。 – Hernan
@Hernan: 'fset'を変更して' self'を返します(あるいは、おそらく自分自身のコピーを返します、私は本当に覚えていません)。ロケット科学は関与していません。 –
それは私が思ったものですが、私が投稿に入れたリンクでは、プロパティからサブクラス化してprint(args、kwargs)を__init__に追加したクラスの操作を見て、プロパティを再作成しているようですfsetを変更するだけではありません。これは事実ですか?何故ですか? – Hernan