相关疑难解决方法(0)

Python中的好或坏练习:在文件中间导入

假设我有一个相对较长的模块,但只需要一次外部模块或方法.

在模块中间导入该方法或模块是否可以?

或者应该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或相关来源的链接

python python-import

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

Python类设计 - 将大类拆分为多个类以分组功能

好的,我有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 class

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

将python类拆分为多个文件

我想知道是否有人可以告诉我是否可以将以下代码分为两个 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)

module class python-3.x pyqt5

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

将模块内的所有函数和类导入到python类中

我正在尝试将所有对象从子文件夹导入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,这意味着必须更改selfself.packageI的所有引用仅使用该类中的所有方法创建另一个文件夹,以便没有单个极长的文件。

所以我想我有三个问题:为什么不允许在一个类中全部导入,如何解决这个问题,还有更好的方法将多个方法拆分为不同的文件吗?

编辑:我看过这篇文章是我目前所拥有的,但是我不想使用手动导入所有内容,而是代替了手动导入所有内容*

编辑2:也许创建一个类的子方法作为包并将其作为self导入是可行的(例如import bar.package as self),但这可能会覆盖默认的self。例如说我有两个文件foo.pybar.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)

python module class python-import python-3.x

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

标签 统计

class ×3

python ×3

module ×2

python-3.x ×2

python-import ×2

pyqt5 ×1