3

私はPython 2.7で以下を持っています:

class MyClass(object):
    ...
    @property
    def my_attr(self):
        ...

    @my_attr.setter
    def my_attr(self, value):
        ...

そこでいくつかのロジックを実行できるように、ゲッター/セッターを使用します。

それから私は呼び出すことができます:

import myModule
test = myModule.MyClass()
test.my_attr = 9

次のようなことができるように、モジュール レベルでエイリアスを使用したいと思います。

import myModule
myModule.my_attr = 9

それを行う方法はありますか?

4

2 に答える 2

5

そのとおり; 重要なのは、モジュール自体がオブジェクトであるということです。MyClassまず、サブクラスをモジュール タイプにする必要があります。

from types import ModuleType

class MyClass(ModuleType):
    ...

次に、現在のモジュールを MyClass のインスタンスに置き換えます。

import sys
sys.modules[__name__] = MyClass(__name__)

これは、静的アナライザーやコードを読む人にとってかなり混乱する可能性があることに注意してください。

于 2013-08-21T19:28:38.607 に答える