当前位置: 首页 > 面试题库 >

有没有相当于分部类的Python?

阎自怡
2023-03-14
问题内容

使用“新”样式类(我在python
3.2中)是否可以将一个类拆分为多个文件?我有一个大类(从面向对象的设计角度来看,考虑耦合等等,它实际上应该是一个类,但是为了方便编辑类,最好分割几个文件。


问题答案:

如果您的问题确实只是在编辑器中使用大型类,那么我真正寻找的第一个解决方案是解决问题的更好方法。第二种解决方案是更好的编辑器,最好是带有代码折叠的编辑器。

也就是说,有几种方法可以将一个类分解为多个文件。Python使您可以通过将文件夹放入__init__.py其中来将其用作模块,然后将其从其他文件中导入。我们将在每个解决方案中使用此功能。首先创建一个名为的文件夹bigclass

  1. 在文件夹中放入.py最终将构成您的班级的各种文件。每个类都应包含最终类( 而不是 类)的函数和变量定义。在__init__.py同一文件夹中,写下以下内容,将它们全部组合在一起。
    class Bigclass(object):
    
    from classdef1 import foo, bar, baz, quux
    from classdef2 import thing1, thing2
    from classdef3 import magic, moremagic
    # unfortunately, "from classdefn import *" is an error or warning
    
    num = 42   # add more members here if you like
    

这样的好处是您最终得到了一个直接从派生的类,该类object在继承图中看起来不错。

  1. 您可以使用多重继承来组合类的各个部分。在您的各个模块中,您将为该类的Bigclass各个部分编写一个类定义。然后在您的__init__.py写道:

    import classdef1, classdef2, classdef3
    

    class Bigclass(classdef1.Bigclass, classdef2.Bigclass, classdef3.Bigclass):
    num = 42 # add more members if desired

  2. 如果多重继承成为问题,则 可以 使用单一继承:只需让每个类以链式方式从另一个继承即可。假设您没有在一个以上的类中定义任何内容,则顺序无关紧要。例如,classdef2.py将是:

    import classdef1
    

    class Bigclass(classdef1.Bigclass):
    # more member defs here

classdef3Bigclass从中导入classdef2并添加到其中,依此类推。您__init__.py只需导入最后一个:

    from classdef42 import Bigclass

我通常更喜欢#1,因为它更明确地说明了您要从哪些文件中导入哪些成员,但是这些解决方案中的任何一种都可以为您服务。

要在任何这些情况下使用该类,您都可以使用文件夹名称作为模块名称将其导入:from bigclass import Bigclass



 类似资料:
  • 我知道你可以通过从批处理文件或类似文件中调用jar来将它作为Windows服务运行,而且我知道当你使用一个应用服务器,如WAS或Glassfish时,你有JVMS本身正在“运行”。但除非我弄错了,否则这些不一定是“服务”。也就是说,在没有任何用户输入的情况下执行的进程。根据我的理解,你仍然需要调用JVM来让它执行一个进程(如果我错了,请随时纠正我)。但我一直很好奇什么是Windows服务的Java

  • 问题内容: 在Spring 3.0中有一个注释。它允许直接在Java代码中定义Spring bean。在浏览Spring参考时,我发现了使用此批注的两种不同方法-带注释的内部类和没有此注释的内部类。 本节包含以下代码: 在这里我们可以看到一段非常相似的代码,但是现在就在这里: 参考的前一部分包含以下说明: Spring组件中的@Bean方法的处理方式与Spring @Configuration类中

  • 我只是在尝试内部类,遇到了这个想法,即拥有本地但静态的内部类…好吧,我在静态方法中制作了一个内部类…就这么简单…这是我做的例子 这不会给出任何编译错误。 我知道如何访问静态方法m。但是我想知道是否有办法从外部类访问本地类 LocalStatic.好吧,根据我的理解,我们无法访问方法内部的东西,对吧?因此,我无法从类外部访问LocalStatic或该本地类内的任何方法或属性,只想确保..

  • 考拉提供了一种非常简单的方法,可以在Facebook的用户墙上发布状态更新。我想知道是否存在一个 gem 来对 Twitter 做类似的事情:换句话说,我正在寻找一个 gem,可以轻松地让您的应用程序为用户发布一些东西。 非常感谢任何建议。

  • 问题内容: 我知道(其中e是一个异常)会打印发生的异常,但是,我试图找到与Java等效的python,它可以将异常确切地跟踪到发生的那一行,并打印出整个轨迹。 谁能告诉我Python 的等效功能吗? 问题答案: 在块内执行此操作时,它将自动使用当前异常。有关更多信息,请参见http://docs.python.org/library/traceback.html。

  • 我使用github的时间相对较短,并且一直使用客户端执行提交和拉取。我决定从昨天的git bash开始尝试它,并且我成功地创建了一个新的repo和提交的文件。 今天,我从另一台计算机上对存储库进行了更改,我提交了更改,现在我回到家里,执行了来更新我的本地版本,我得到了以下信息: 这次回购的唯一贡献者是我,没有分支(只有一个主人)。我在windows上执行了git Bash中的pull: 我做错了什