#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
в эти новые методы, которые вы определяете в классе A2. я просто редактирую свой вопрос, спасибо, но я не думаю, что это решит мою проблему