繁体   English   中英

在包中的单独文件中从类创建对象

[英]Create object from class in separate file in package

如何在python包中正确使用父子类? (初始文件为空)

├── modula
│   │   ├── child.py
│   │   ├── __init__.py
│   │   ├── parent.py
│   │   └── __pycache__
│   │       ├── child.cpython-35.pyc
│   │       ├── __init__.cpython-35.pyc
│   │       └── parent.cpython-35.pyc
└───└── modulae.py

--- parent.py ---

class parent(object):
    def __init__(self):
        print('initialised parent')

---- child.py ---

import parent
class child(parent.parent):
    def __init__(self):
        print("initialised child")

--- modulae.py ---

import modula
modula.child()

错误提示:

modulae.py", line 5, in <module>
    modula.child()
AttributeError: module 'modula' has no attribute 'child'

child.py应该from . import parent from . import parent和modulae.py应该from modula.child import childfrom modula import child; child.child() from modula.child import child from modula import child; child.child() from modula import child; child.child()

默认情况下,Python不会为您导入子包。 因此,如果您有:

modula
    __init__.py
    child.py

您无法通过以下方式访问孩子:

import modula
modula.child  # fails

因为您只告诉Python导入modula ,而不是modula.child 您可以通过多种方式解决此问题。

1.导入childmodula.__init__.py

# __init__.py
# use a relative import because we're importing from the same package,
# otherwise this could be ambiguous (and doesn't work at all in 
# Python 3).
from . import child

# Now in my script I can do:
import modula
modula.child

2.在脚本中导入child (如果您不希望在加载modula时总是加载child的开销,则可能需要这样做:

# Script
import modula.child
modula.child  # works

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM