是否可以将一个类的方法导入Python中的另一个类?

用户5423

我在python中有两个类:

  1. ClassA从其他类似方法中的较大字符串中获取字符串
  2. ClassB从其他类似方法中的较大字符串中删除字符串

比这更复杂的,这就是我使用类的原因。最初,我将所有方法都放在一个类中,但是有点难以理解,我想将这些方法逻辑上分为两部分,因此我将一些函数移到了ClassB中。ClassA和ClassB没有父子关系,并且相似,但是我希望它们保持分隔。

我希望能够从ClassA访问ClassB方法。有没有一种方法可以从类A访问类B方法而不必创建新对象;通过执行诸如将ClassB的方法导入或添加到Class A之类的操作。

class readText:
    def __init__(self, book):
        self.book = book 

    def getPageFromNum(self):
        ##Some Code
    def getLineFromPage(self):
        ##Some Code

class modifyText:
   def __init__(self, book):
       self.book = book

   def removeLine(self, lineNumber):
        ##Some Code
   def removeWordInstances(self, word)
        ##Some Code


readableBook = readText(book)
##Accessing methods of the objects classes
readableBook.getLineFromPage()
##I want to be able to access methods of the other class modifyText in the same way like below
readableBook.removeLine(50)

假设问题1是可能的,我还有第二个问题。到目前为止,我在A类中有大约30种方法,在B类中有15种方法。初始化classA对象时,有没有办法让我有一个可选参数来添加其他方法。我将始终需要在字符串上使用ClassA方法,但是我并不总是需要在字符串上使用classB方法。这会以任何重要方式使程序更高效吗?

克里斯·莫泽列夫斯基

可能要使用的最干净,最少漏洞的模型依赖于混合继承模式,并且可以与Abstract Base Classes结合使用

基本原理是,您定义了一个混合类,该混合类并非旨在单独实例化,而是用于实现与其相关类共享的方法。

因此,您可以拥有以下内容:

class MixinSource:
    ...
    def shared_method1(self, param1):
        ...

    def shared_method2(self):
        ...

    def overwrite_me(self, param1, param2):
        ...

class Foo(SomeOtherClass, MixinSource):
    ...

class Bar(YetAnotherClass, MixinSource):
    ...
    def overwrite_me(self, param1, param2):
        ...

该代码的基本作用是使您可以将共享代码保留在MixinSource类中,并在必要时覆盖这些共享方法。

在上面的示例中,如果您具有Foo的实例Bar,则它们都将具有与MixinSource在这些继承者类中创建的方法相同的方法,以及与之相同的方法此外,Bar该类将使用方法不同的实现overwrite_meMixinSource

它还允许您从其他类继承,这样就可以使域保持不同,这听起来像是您的偏好。您可以在此处阅读有关Python混合模式的更多信息:https : //softwareengineering.stackexchange.com/questions/312339/are-python-mixins-an-anti-pattern

也有更高级的方法来对涉及抽象基类的概念进行建模基本上,您定义一个混入的ABC,定义必须由继承类实现的共享方法(使用abstractmethod装饰器),然后定义在ABC自身内部实现的共享方法。如果确实需要,您可以充分利用ABC注册和子类挂钩逻辑(请参阅上面链接的Python文档),将ABC的条件逻辑/条件注册应用于基于其属性的继承类。但是,这将是一个主要的反模式,并使任何维护您代码的人都很难遵循您的代码(可以想象自己在未来三到四年内遵循这种逻辑)。

因此,您可以根据需要执行此操作,但是我绝对会仔细考虑添加的复杂性是否真正值得。

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以在另一个类中调用一个类的构造函数?

来自分类Dev

将类的变量导入另一个类

来自分类Dev

在Java中,为什么可以在导入超类时将子类导入另一个类?

来自分类Dev

从Python 2.7中的另一个类方法调用一个类方法

来自分类Dev

在一个类中使用python方法检查另一个类对象中的变量是否相同

来自分类Dev

如何从python中的另一个类导入方法或使用该方法?

来自分类Dev

将int导入另一个类

来自分类Dev

将参数作为另一个 Python 类中的类方法的装饰器

来自分类Dev

是否可以修补在另一个类中调用的方法?

来自分类Dev

是否可以从另一个文件访问python文件中声明的类的特定实例?

来自分类Dev

是否可以从另一个类调用performSegueWithIdentifier?

来自分类Dev

从另一个目录导入类-Python

来自分类Dev

从另一个文件Python导入类变量

来自分类Dev

如何从另一个目录导入python类

来自分类Dev

CSS:是否可以用另一个类覆盖一个类?

来自分类Dev

是否可以从另一个类内部调用一个类(不扩展)?

来自分类Dev

在C#中“导入”另一个类

来自分类Dev

Python类:一个类中的实例方法指向另一个类中的实例方法

来自分类Dev

PHP:是否可以从另一个静态类调用静态类方法?

来自分类Dev

在 Java 中,是否可以在另一个类中使用一个类的元素/函数?

来自分类Dev

是否可以在不导入Xcode中的目标的情况下访问另一个目标中的类?

来自分类Dev

将类从一个C#项目导入到另一个项目时,是否可以排除自动生成的文件?

来自分类Dev

为什么可以将一个类的对象添加到另一个类的LinkedList中?

来自分类Dev

在python的同一类中的另一个方法中调用一个类的方法

来自分类Dev

将一个类的对象传递给另一个类的方法

来自分类Dev

将值从另一个类中的另一个方法放入Hashmap中

来自分类Dev

有没有一种方法可以将Java中的一个类“别名”为另一个类?

来自分类Dev

我如何在另一个类中使用一个类中的方法(是否可能)

来自分类Dev

将一个类传递给另一个类(Python)

Related 相关文章

  1. 1

    是否可以在另一个类中调用一个类的构造函数?

  2. 2

    将类的变量导入另一个类

  3. 3

    在Java中,为什么可以在导入超类时将子类导入另一个类?

  4. 4

    从Python 2.7中的另一个类方法调用一个类方法

  5. 5

    在一个类中使用python方法检查另一个类对象中的变量是否相同

  6. 6

    如何从python中的另一个类导入方法或使用该方法?

  7. 7

    将int导入另一个类

  8. 8

    将参数作为另一个 Python 类中的类方法的装饰器

  9. 9

    是否可以修补在另一个类中调用的方法?

  10. 10

    是否可以从另一个文件访问python文件中声明的类的特定实例?

  11. 11

    是否可以从另一个类调用performSegueWithIdentifier?

  12. 12

    从另一个目录导入类-Python

  13. 13

    从另一个文件Python导入类变量

  14. 14

    如何从另一个目录导入python类

  15. 15

    CSS:是否可以用另一个类覆盖一个类?

  16. 16

    是否可以从另一个类内部调用一个类(不扩展)?

  17. 17

    在C#中“导入”另一个类

  18. 18

    Python类:一个类中的实例方法指向另一个类中的实例方法

  19. 19

    PHP:是否可以从另一个静态类调用静态类方法?

  20. 20

    在 Java 中,是否可以在另一个类中使用一个类的元素/函数?

  21. 21

    是否可以在不导入Xcode中的目标的情况下访问另一个目标中的类?

  22. 22

    将类从一个C#项目导入到另一个项目时,是否可以排除自动生成的文件?

  23. 23

    为什么可以将一个类的对象添加到另一个类的LinkedList中?

  24. 24

    在python的同一类中的另一个方法中调用一个类的方法

  25. 25

    将一个类的对象传递给另一个类的方法

  26. 26

    将值从另一个类中的另一个方法放入Hashmap中

  27. 27

    有没有一种方法可以将Java中的一个类“别名”为另一个类?

  28. 28

    我如何在另一个类中使用一个类中的方法(是否可能)

  29. 29

    将一个类传递给另一个类(Python)

热门标签

归档