下記コードは、pythonのデスクリプタを活用した初歩的な例なのですが、__get__メソッドの三番目の引数である、objtypeもしくはobjtype=Noneって必要なんでしょうか?
また必要だとしたら、これを記載することで何の意味があるのでしょうか?
またobjtype=None以外のパターンもいくつかあったりするのでしょうか?
ご教授頂けると助かります。
↓一つ目の例
python3
1class RevealAccess(object): 2 """A data descriptor that sets and returns values 3 normally and prints a message logging their access. 4 """ 5 6 def __init__(self, initval=None, name='var'): 7 self.val = initval 8 self.name = name 9 10 def __get__(self, obj, objtype): 11 print('Retrieving', self.name) 12 return self.val 13 14 def __set__(self, obj, val): 15 print('Updating', self.name) 16 self.val = val 17 18class MyClass(object): 19 x = RevealAccess(10, 'var "x"') 20 y = 5
↓二つ目の例
python3
1class Descriptor: 2 3 def __get__(self, obj, objtype=None): 4 print('__get__') 5 return obj._value 6 7 def __set__(self, obj, value): 8 print('__set__') 9 obj._value = value 10 11 def __delete__(self, obj): 12 print('__delete__') 13 del obj._value 14 15 16class MyClass: 17 18 value = Descriptor() 19 20 def __init__(self, value): 21 self.value = value
あなたの回答
tips
プレビュー