копирование методов из одного класса в другой (python)

#python #class #monkeypatching

#python #класс #поиск обезьян

Вопрос:

поэтому я не знаю, является ли то, о чем я прошу, даже приемлемым или нет, но тем не менее я хочу сделать следующее

 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 будут копировать методы, пока не завершится выполнение кода

Комментарии:

1.Почему не B наследует эти методы от A ?

2. для моего приложения это должно происходить динамически, класс B будет добавлять и удалять новые методы 🙂

3. @void Из ваших последних изменений следует, что вы можете спрашивать о сериализации объектов. Если у вас есть контроль над определением классов, вы можете решить свою проблему, сделав их доступными для выбора .

4. На самом деле они поддаются обработке, но проблема с pickel очень медленная, и я думаю, что я мог бы значительно оптимизировать процесс серилизации для моей программы😅

5. @void звучит как преждевременная оптимизация. Если вы не проводите тестирование в реальном мире, утверждение, что «x очень медленный», бессмысленно, поскольку все остальные методы сериализации могут быть еще медленнее.

Ответ №1:

Вы можете проверить наследование классов или полиморфизм. Если у вас есть только один класс, который должен использовать функцию другого, наследование лучше. Один будет дочерним для другого. Например, если 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
 

Тогда вы могли бы использовать функции Person от Student:

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

подробнее: https://www.w3schools.com/python/python_inheritance.asp

Комментарии:

1. я просто редактирую свой вопрос, спасибо за ваш ответ, но я не думаю, что это решит мою проблему

Ответ №2:

Вы можете передать класс A в класс B, если то, что вы делаете, — это позволить B иметь функции в A.

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

B.method1()
B.method2()
 

Комментарии:

1. Более конкретно, вы можете добавить его как super . Вы можете определять методы methodA и methodB и добавлять super.methodA и super.methodB в эти новые методы, которые вы определяете в классе A

2. я просто редактирую свой вопрос, спасибо, но я не думаю, что это решит мою проблему