我在模块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__)
打印child
或child.py
,而不是打印当前打印的__main__
。
P.S。无需在子类
中重新定义 init 方法答案 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__)