相关疑难解决方法(0)

在Python中避免循环(循环)导入?

一种方法是使用import x,而不使用"from"关键字.那么你随处可见它们的命名空间.

还有其他方法吗?喜欢做类似于C++ ifnotdef __b__ def __b__类型的东西?

python python-2.7

7
推荐指数
2
解决办法
1万
查看次数

解决python中的循环导入错误

可能重复:
Python中的循环(或循环)导入

我有B类导入并创建类A的实例.A类需要在其构造函数中引用B,因此包括B.

from a import A
class B:
  def __init__(self):
    self.a = A()
Run Code Online (Sandbox Code Playgroud)
from b import B
class A:
  def __init__(self, ref):
    assert isinstance(ref, B)
    self.ref = ref
Run Code Online (Sandbox Code Playgroud)

这不起作用.主文件导入B并使用它......不是.进口的东西是错误的.

文件 导入错误:导入错误:无法导入名称B.

python class python-import

5
推荐指数
1
解决办法
7535
查看次数

包内进口并不总是有效

我有一个像这样结构的Django项目:

appname/
   models/
      __init__.py
      a.py
      base.py
      c.py
Run Code Online (Sandbox Code Playgroud)

... appname/models/__ init__.py只包含这样的语句:

from appname.models.base import Base
from appname.models.a import A
from appname.models.c import C
Run Code Online (Sandbox Code Playgroud)

...以及appname/models/base.py包含的位置:

import django.db.models


class Base(django.db.models.Model):
   ...
Run Code Online (Sandbox Code Playgroud)

以及appname/models/a.py包含的位置:

import appname.models as models


class A(models.Base):
   ....
Run Code Online (Sandbox Code Playgroud)

...同样适用于appname/models/c.py等.

我很满意我的代码结构,但当然它不起作用,因为循环导入.

当appname/__ init__.py运行时,appname/models/a.py将运行,但该模块导入"appname.models",尚未完成执行.经典循环导入.

所以这应该表明我的代码结构很差,需要重新设计以避免循环依赖.

有什么选择呢?

我能想到的一些解决方案,以及为什么我不想使用它们:

  1. 将我的所有模型代码合并到一个文件中:在我看来,在同一个文件中有20多个类比我尝试做的(使用单独的文件)更糟糕.
  2. 将"Base"模型类移动到"appname/models"之外的另一个包中:这意味着我最终会在我的项目中包含包含基类/父类的包,这些类理想情况下应该拆分为其子/子包中的包课程位于.为什么我应该在同一个包中有模型,表单,视图等的基类/父类,而不是它们自己的包(子/子类所在的位置),除了避免循环导入?

所以我的问题不仅仅是如何避免循环导入,而是以一种与我试图实现的方式一样干净(如果不是更干净)的方式.

有没有人有更好的方法?

python circular-dependency python-import

5
推荐指数
1
解决办法
1406
查看次数

递归导入:'import'与'from ... import ...'

我有两个文件需要使用彼此不同的功能.

file1.py:

import file2   # from file2 import y2

def x1():
    print "x1"

def x2():
    print "x2"
    file2.y2()
Run Code Online (Sandbox Code Playgroud)

file2.py:

import file1   # from file1 import x1

def y1():
    file1.x1()
    print "y"

def y2():
    print "y2"

if __name__ == "__main__":
    y1()
Run Code Online (Sandbox Code Playgroud)

我想知道为什么使用import file1工作,但从file1(from file1 import x1)导入只是特定的功能不是?

Traceback (most recent call last):
  File "file2.py", line 1, in <module>
    from file1 import x1
  File "file1.py", line 1, in <module>
    import file2
  File "file2.py", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud)

python python-import

5
推荐指数
1
解决办法
2466
查看次数

如何理解python中的导入?

我有a.pyb.py在同一个目录中。在 a.py 中,代码是

A = 'a1'

from b import B

print(B)
Run Code Online (Sandbox Code Playgroud)

在 b.py 中,代码是

B = 'b1'

from a import A

print(A)
Run Code Online (Sandbox Code Playgroud)

现在运行a.py,结果是

b1
a1
b1
Run Code Online (Sandbox Code Playgroud)

我不明白。有人会解释吗?谢谢!

python import

5
推荐指数
1
解决办法
73
查看次数

导入不起作用

我有两个文件说a.pyb.py.

在a.py中,我们这样做

import xxx
from b import *
Run Code Online (Sandbox Code Playgroud)

在b.py中我们有一个需要的功能module xxx.现在,当b.py从中调用函数时a.py,无法找到该模块xxx.

为什么这可以解决这个问题?我不能做import xxxb.py出于某种原因.

MCV:

a.py

import xxx
from b import *
fun()
Run Code Online (Sandbox Code Playgroud)

b.py

def fun():
    xxx.dosomething()
Run Code Online (Sandbox Code Playgroud)

错误:

Global name xxx not defined

python python-import

4
推荐指数
1
解决办法
1168
查看次数

在Python中使用typeguard装饰器:@typechecked,同时避免循环导入?

语境

为了防止在使用类型提示时在 Python 中循环导入,可以使用以下构造:

# controllers.py
from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from models import Book


class BookController:
    def __init__(self, book: "Book") -> None:
        self.book = book
Run Code Online (Sandbox Code Playgroud)

if TYPE_CHECKING:在类型检查期间执行,而不是在代码执行期间执行。

问题

当应用主动函数参数类型验证(基于参数的类型提示)时,typeguard会抛出错误:

名称错误:名称“Supported_experiment_settings”未定义

多维我

# models.py
from controllers import BookController

from typeguard import typechecked

class Book:
    
    @typechecked
    def get_controller(self, some_bookcontroller:BookController):
        return some_bookcontroller

some_book=Book()
BookController("somestring")
Run Code Online (Sandbox Code Playgroud)

和:

# controllers.py
from __future__ import annotations
from typing import TYPE_CHECKING
from typeguard import typechecked
#from models …
Run Code Online (Sandbox Code Playgroud)

python circular-dependency type-hinting typeguards

4
推荐指数
1
解决办法
973
查看次数

在单独的文件中定义 Python 类

# File 1
me = MongoEngine(app) # I want to use my instance of MongoEngine to define new classes like the example in File 2

# File 2
class Book(me.Document):
    title = StringField(null=False, unique=True)
    year_published = IntField(null=True)
Run Code Online (Sandbox Code Playgroud)

在新文件中创建新类时,如何将实例me.Document作为对象定义传递。如果我把它们放在同一个文件中,它会起作用吗?

oop abstraction instance-variables python-3.x

3
推荐指数
1
解决办法
1万
查看次数

ImportError:模型A引用模型B,模型B引用模型A.

我认为这比Django更像是一个蟒蛇问题.

但基本上我在模特A做:

from myproject.modelb.models import ModelB
Run Code Online (Sandbox Code Playgroud)

在模型B:

from myproject.modela.models import ModelA
Run Code Online (Sandbox Code Playgroud)

结果:

无法导入名称ModelA

我做了一些禁止的事吗?谢谢

python django circular-dependency

2
推荐指数
1
解决办法
425
查看次数

在python中将变量全局变为多个文件

我想将变量全局变为2个以上的文件,以便在包含变量的文件中反映任何文件中的操作.

我在做的是:

b.py

import a

x = 0
def func1():
    global x
    x = 1   
if __name__ == "__main__":
    print x
    func1()
    print x
    a.func2()
    print x
Run Code Online (Sandbox Code Playgroud)

a.py

import b

def func2():
    print b.x
    b.x = 2
Run Code Online (Sandbox Code Playgroud)

我在这里搜索了线程,发现from a import *正在复制,import a否则.我希望上面的代码在执行时打印0 1 1 2(确定它应该在新行中),python b.py但它正在显示0 1 0 1

如何实现?

python global-variables

2
推荐指数
1
解决办法
9347
查看次数

循环导入的python解决方法

好的,就是这样。

我不想放弃我的代码,但是如果您确实需要它,我会的。我有两个彼此需要一点点的模块。这些模块称为webhandler和datahandler。

在webhandler中,我有一行:

import datahandler 
Run Code Online (Sandbox Code Playgroud)

在数据处理程序中,我还有另一行:

import webhandler
Run Code Online (Sandbox Code Playgroud)

现在我知道这是糟糕的代码,并且这样的循环导入会导致代码运行两次(这是我试图避免的事情)。

但是,数据处理程序模块需要访问Web处理程序模块中的多个功能,并且Web处理程序模块需要访问在数据处理程序模块中生成的多个变量。除了将功能移动到不同的模块之外,我没有看到其他解决方法,但这会破坏程序的组织,并且对模块命名没有逻辑意义。

有什么帮助吗?

python import module circular-dependency python-2.7

2
推荐指数
2
解决办法
2964
查看次数

Python Django:导入错误:无法从部分初始化的模块“...”导入名称“...”(很可能是由于循环导入)(......)

在 Django 项目中,我需要从 file-2 中的 file-1 导入 class-A。并从 file-2 导入 file-1 中的 B 类。

\n

这些类有其独特的方法,我想在另一个文件中使用这些方法(如上面的描述)。

\n

我正在与:

\n
\n

Python 3.8.10(在虚拟环境中)

\n

Windows 10 - 64 位(最新版本)

\n

姜戈 4.0.4

\n
\n

当我运行时python manage.py runserver,我看到以下错误:

\n
(my_ea_proj) PS F:\\my_ea_proj\\ea_proj> python.exe .\\manage.py runserver\nTraceback (most recent call last):\n  File ".\\manage.py", line 30, in <module>\n    main()\n  File ".\\manage.py", line 13, in main\n    django.setup()\n  File "F:\\my_ea_proj\\lib\\site-packages\\django\\__init__.py", line 24, in setup\n    apps.populate(settings.INSTALLED_APPS)\n  File "F:\\my_ea_proj\\lib\\site-packages\\django\\apps\\registry.py", line 116, in populate\n    app_config.import_models()\n  File "F:\\my_ea_proj\\lib\\site-packages\\django\\apps\\config.py", line …
Run Code Online (Sandbox Code Playgroud)

python windows django python-3.x

2
推荐指数
1
解决办法
9127
查看次数

无法导入类

这是我正在制作的游戏.不过我自己也看不到问题.

这是错误和两个.py文件:

C:\Users\Rickard\My Programs\Python\slutarbete\New try>main.py
Traceback (most recent call last):
  File "C:\Users\Rickard\My Programs\Python\slutarbete\New try\main.py", line 6,
 in <module>
    from rabbits import Rabbit
  File "C:\Users\Rickard\My Programs\Python\slutarbete\New try\rabbits.py", line
 3, in <module>
    import main
  File "C:\Users\Rickard\My Programs\Python\slutarbete\New try\main.py", line 6,
 in <module>
    from rabbits import Rabbit
ImportError: cannot import name Rabbit
Run Code Online (Sandbox Code Playgroud)

main.py

# -*- coding: utf-8 -*-

import pygame, sys, random, math
from rabbits import Rabbit
from pigs import Pig
from boars import Boar
from pygame.locals import *
from threading import Timer …
Run Code Online (Sandbox Code Playgroud)

python pygame

1
推荐指数
2
解决办法
8664
查看次数