假设我有一个相对较长的模块,但只需要一次外部模块或方法.
在模块中间导入该方法或模块是否可以?
或者应该import只在模块的第一部分.
例:
import string, pythis, pythat
...
...
...
...
def func():
blah
blah
blah
from pysomething import foo
foo()
etc
etc
etc
...
...
...
Run Code Online (Sandbox Code Playgroud)
请证明您的答案是合理的,并添加指向PEP或相关来源的链接
好的,我有2个非常大的类> 1k行,我现在分成多个.然后,他们使用多重继承重新组合.现在我想知道,如果有更干净/更好的pythonic方式这样做.完全将它们分解出去会导致无数的self.otherself.do_something调用,我认为这不应该是它应该完成的方式.
为了使事情清楚,这是它目前的样子:
from gui_events import GUIEvents # event handlers
from gui_helpers import GUIHelpers # helper methods that don't directly modify the GUI
# GUI.py
class GUI(gtk.Window, GUIEvents, GUIHelpers):
# general stuff here stuff here
Run Code Online (Sandbox Code Playgroud)
造成这种情况的一个问题是Pylint抱怨给我数万亿的"init not called"/"undefined attribute"/"在定义之前访问的属性"警告.
编辑:
你可能想看看代码,让自己想象一下整个事情究竟是什么.
http://github.com/BonsaiDen/Atarashii/tree/next/atarashii/usr/share/pyshared/atarashii/
请注意,我正在尝试将这个东西尽可能保持干燥,我正在使用pylint来检测代码重复,它唯一抱怨的是导入.
我想知道是否有人可以告诉我是否可以将以下代码分为两个 python 类,然后将它们放置在两个不同的文件中:
from GUI import mainGUI
from GUI import subwindowGUI
class MyApp(QMainWindow, mainGUI.Ui_MainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.setupUi(self)
# mainGUI contains QMdiarea in which it opens
# a subwindow by calling a function MySubWin(self)
# QMdiarea name is 'body'
self.OpenSub.triggered.connect(self.MySubWin)
def MySubWin(self):
self.MySubWin = QWidget()
self.MySubWin.setObjectName('Module window')
self.myTabs = QtabWidget(self.MySubWin)
self.myTabs.setObjectName('myTabs')
# now I call the function that will display
# the gui elements inside this 'Module window'
self.create_module_gui()
self.body.addSubWindow(self.MySubWin)
self.MySubWin.showNormal()
def create_module_gui(self, *args):
module_gui = subwindowGUI.Ui_ModuleWindow()
module_gui.setupUi(module_gui) …Run Code Online (Sandbox Code Playgroud) 我正在尝试将所有对象从子文件夹导入python 3.8中的类,并在努力寻找一种方法来这样做。我不想手动导入所有对象,因为要列出的文件太多:
class Foo:
from bar import {
one,
two,
three,
# ...
}
Run Code Online (Sandbox Code Playgroud)
当我使用星号导入所有函数和类(例如from bar import *)时,出现以下错误:
SyntaxError: import * only allowed at module level
Run Code Online (Sandbox Code Playgroud)
另外,我也不希望将所有内容放在子作用域下(例如import bar.package,将所有文件放在的package子包中bar),因为函数在运行时bar依赖于传递self,这意味着必须更改self对self.packageI的所有引用仅使用该类中的所有方法创建另一个文件夹,以便没有单个极长的文件。
所以我想我有三个问题:为什么不允许在一个类中全部导入,如何解决这个问题,还有更好的方法将多个方法拆分为不同的文件吗?
编辑:我看过这篇文章,这是我目前所拥有的,但是我不想使用手动导入所有内容,而是代替了手动导入所有内容*。
编辑2:也许创建一个类的子方法作为包并将其作为self导入是可行的(例如import bar.package as self),但这可能会覆盖默认的self。例如说我有两个文件foo.py和bar.py:
# foo.py
def print_bar(self):
print("bar")
Run Code Online (Sandbox Code Playgroud)
# bar.py
class Test:
import foo as self
def __init__(self):
print("hi")
self.one = …Run Code Online (Sandbox Code Playgroud)