2016-11-11 8 views
1

モジュールbase.pyにあるBaseという基底クラスがあります。どのモジュールが__main__のクラスオブジェクトのモジュール名を取得する

class Base: 
    def __init__(self): 
     print(self.__module__) 

また、モジュールchild.pyである子クラスChildがあります。

from test.base import Base 

class Child(Base): 
    pass 

if __name__ == '__main__': 
    c = Child() 

私はpython child.pyを実行します。 私は文print(self.__module__)childまたはchild.pyに印刷します.__main__は現在印刷されていません。

P.S.子クラスのメソッドを再定義しないでください

答えて

0

実際には、私はあなたが本当に何を意味するのか分かりません。 しかし、私はisinstance()があなたを助けると思う。 the__init__of基底クラスで

if isinstance(obj, Child): 
    self.__module__ = "Child" 

か、単にself.__class__

+0

それは私が意味することではないのですが。私がクラスが多い複雑な 'mro'を持っているなら、私はクラスがあるのと同じように' if isinstance'を書く必要がありますか? – hasam

+0

'self .__ class__'を試してみませんか? – Jing

0

__file__あなたのための 'child.py' が含まれていますを使用します。

print(__file__) 
0

は代わりif __name__ == '__main__'ブロック内で直接機能を置くこと、main関数を定義します。その後、if __name__ == '__main__'ブロック、childモジュールからmain機能をインポートして、そのバージョンを実行します。

import test.base 

class Child(test.base.Base): 
    pass 

def main(): 
    ... 

if __name__ == '__main__': 
    # Even though this is child.py, it's not the child module. 
    # Import main from the child module so we get the right Child class. 
    import child 
    child.main() 
関連する問題