获取类对象的模块名称,该模块是__main__

时间:2016-11-11 10:07:34

标签: python python-3.x oop

我在模块Base中有一个基类base.py

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

此外,模块Child中还有一个子类child.py

from test.base import Base

class Child(Base):
    pass

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

我跑python child.py。 我希望声明print(self.__module__)打印childchild.py,而不是打印当前打印的__main__

P.S。无需在子类

中重新定义 init 方法

3 个答案:

答案 0 :(得分:1)

不要将功能直接放在if __name__ == '__main__'块中,而是定义main功能。然后,在if __name__ == '__main__'块中,main模块导入child函数并运行该版本:

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()

答案 1 :(得分:0)

实际上,我不确定你的意思。 但我认为isinstance()会对你有帮助。

在基础课的_init__中:

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

或只使用self.__class__

答案 2 :(得分:0)

__file__将包含'child.py'。

print(__file__)