【问题标题】:copy methods from one class to another (python)将方法从一个类复制到另一个(python)
【发布时间】:2021-03-25 03:33:54
【问题描述】:

所以我不知道我所要求的是否可以通过,但无论如何,我想做的是以下

class A:
    def methodA(self):
        pass
    def methodB(self):
        pass

class B:
    pass


b = B()

b.methodA()
b.methodB()

但问题是我可能会有这么多 B 类对象,这就是为什么我想将“A”方法分配给 B 类而不是 B 类的单个对象,我找到了一个解决方案但它的问题是我必须将对象作为参数传递,所以例如我会有这样的东西

b.methodA(b)
b.methodB(b)

已编辑 所以我想做这样的事情的原因是,我正在制作一个程序,它将有两个 python 解释器,它们解释同一个 python 文件,我想通过只发送/接收对象内部的数据以及对象类型,因此另一个解释器将只接收对象数据及其类型,并从 B 类等类中创建新对象,并且由于两个解释器都在解释同一个 python 文件,所以它们都可以访问对象类,所以我真的不必发送对象方法,我可以简单地让其他解释器复制它(如果它可以通过的话)

已编辑 所以我需要在运行时分配方法并删除它们,在代码执行完成之前,我将无法知道 B 类将从哪些类中复制方法

【问题讨论】:

  • 为什么B继承 A 的那些方法?
  • 对于我的应用程序,它必须动态发生,B 类将添加和删除新方法:)
  • @void 从您最近的编辑中可以看出,您可能会询问对象序列化。如果您可以控制类的定义,则可以通过making them pickleable 解决您的问题。
  • 它们实际上可以腌制,但腌制的问题很慢,我想我可以为我的程序优化序列化过程????
  • @void 听起来像是过早的优化。如果您不进行实际测试,声称“x 非常慢”是没有意义的,因为所有其他序列化方法可能会更慢。

标签: python class monkeypatching


【解决方案1】:

如果你要做的是让 B 在 A 中有函数,你可以将 A 类传递给 B 类。

class A():
    def method1():
        return 'method1'
    def method2():
        return 'method2'
class B(A):
    pass

B.method1()
B.method2()

【讨论】:

  • 更具体地说,您可以将其添加为super。您可以定义方法methodAmethodB,并在您在A 类中定义的这些新方法中添加super.methodAsuper.methodB
  • 我只是编辑我的问题,谢谢,但我认为这不能解决我的问题
【解决方案2】:

您可以检查类继承或多态性。如果您只有一个类应该使用其他类的功能,那么继承会更好。一个将是另一个的孩子。例如,如果B 将是A 的子级,则B 将具有A 函数等等。阅读更多: 示例:

父母

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.firstname, self.lastname)

#Use the Person class to create an object, and then execute the printname method:

x = Person("John", "Doe")
x.printname()

儿童班:

class Student(Person):
  pass

然后你可以使用 Student 的 Person 函数:

x = Student("Mike", "Olsen")
x.printname()

阅读更多:https://www.w3schools.com/python/python_inheritance.asp

【讨论】:

  • 我只是编辑我的问题,感谢您的回复,但我认为这不会解决我的问题
猜你喜欢
  • 2012-03-06
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2019-03-02
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多