インスタンスを介してFooの属性にアクセスすると__getattribute__()
メソッドが呼び出されることはわかっていますが、クラスを介してこの属性に直接アクセスするとどうなりますか?関数が呼び出された場合、ブレークポイントを設定して、プロジェクトのクラスからこのプロパティにアクセスしたときにブレークポイントがトリガーされるようにします。
私は魔法の方法__getattribute__()
でブレークポイントを設定しようとしましたが、何も起こりませんでした。
class Foo:
age = 18
print(Foo.age) # I am curious what method is called
Pythonのすべてがオブジェクトであり、すべてがtype
オブジェクトの動作を決定するを持っています。これは、クラスオブジェクトにも当てはまります。あなたはチェックすることができますtype(Foo)
:
>>> type(Foo)
<class 'type'>
カスタムを提供することにより、クラスのタイプをカスタマイズできますmetaclass
。このメタクラスは、クラスオブジェクトの属性アクセスを担当します。
class MyMeta(type):
def __getattribute__(self, name):
print(f'__getattribute__({self!r}, {name!r})')
return super().__getattribute__(name)
class Foo(metaclass=MyMeta):
age = 18
print(Foo.age)
そして出力は:
__getattribute__(<class '__main__.Foo'>, 'age')
18
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加