加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

构建python项目

发布时间:2020-12-17 17:36:29 所属栏目:Python 来源:网络整理
导读:我需要知道如何设置__init__.py和import以便构造一个python项目,在这里我可以在整个包中使用完全限定的名称. 该软件包将包含许多子软件包,其中可能包含冲突的名称.包中包含的类将彼此子类化,并包含彼此的引用.将生成该项目,因此使用完全限定的名称将使生活变

我需要知道如何设置__init__.py和import以便构造一个python项目,在这里我可以在整个包中使用完全限定的名称.

该软件包将包含许多子软件包,其中可能包含冲突的名称.包中包含的类将彼此子类化,并包含彼此的引用.将生成该项目,因此使用完全限定的名称将使生活变得更加简单.

这个示例项目代表了我要针对的结构,但只包含一个子项目,而IDE似乎对它运行时失败感到满意.

MyPackage / __ init__.py

import SubPackage as SubPackage

MyPackage / SubPackage / __ init__.py

from .FileB import ClassB
from .FileA import ClassA

MyPackage / SubPackage / FileA.py

from __future__ import absolute_import
import MyPackage


class ClassA(MyPackage.SubPackage.ClassB):
    thingA: 'MyPackage.SubPackage.ClassA'
    thingB: MyPackage.SubPackage.ClassB

    def __init__(self):
        self.thingA = None
        self.thingB = None

    def test(self):
        self.thingA = MyPackage.SubPackage.ClassA()
        self.thingB = MyPackage.SubPackage.ClassB()

MyPackage / SubPackage / FileB.py

from __future__ import absolute_import
import MyPackage


class ClassB(object):
    nextB: 'MyPackage.SubPackage.ClassB'

    def __init__(self):
        self.nextB= None

    def test(self):
        self.nextB= MyPackage.SubPackage.ClassB()

test.py

import MyPackage

x = MyPackage.SubPackage.ClassA()

错误

  File "C:tempTest.py",line 3,in <module>
    import GeneratedLx
  File "C:tempMyPackage__init__.py",line 1,in <module>
    import Bs as Bs
  File "C:tempMyPackageSubPackage__init__.py",line 12,in <module>
    from .FileA import ClassA
  File "C:tempMyPackageSubPackageFileA.py",line 5,in <module>
    class ClassA(MyPackage.SubPackage.ClassB):
AttributeError: module 'MyPackage' has no attribute 'SubPackage'
最佳答案
您已经在SubPackage级别上没有名称冲突,因此添加MyPackage完全是多余的,并且不能完全按照您尝试使用它的方式工作.这可能是由于绑定名称或其他原因引起的,但是最终在您需要时没有实例.这使您可以稍微编辑以下文件:“ FileA.py”和“ FileB.py”:

FileA.py

from __future__ import absolute_import
from MyPackage import SubPackage


class ClassA(SubPackage.ClassB):
    thingA: 'SubPackage.ClassA'
    thingB: SubPackage.ClassB

    def __init__(self):
        self.thingA = None
        self.thingB = None

    def test(self):
        self.thingA = SubPackage.ClassA()
        self.thingB = SubPackage.ClassB()

FileB.py

from __future__ import absolute_import
from MyPackage import SubPackage


class ClassB(object):
    nextB: 'SubPackage.ClassB'

    def __init__(self):
        self.nextB= None

    def test(self):
        self.nextB= SubPackage.ClassB()

import语句也等效于使用相对导入而不是绝对的from..import子包,如果需要的话.从风格上讲,我倾向于使用相对导入来帮助我快速找出哪些导入是项目的一部分,哪些是外部依赖项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读