Иерархия классов Diamond Relationship переопределяет только один экземпляр метода, унаследованного от базового класса.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Иерархия классов Diamond Relationship переопределяет только один экземпляр метода, унаследованного от базового класса.

Сообщение Anonymous »

Как я могу переопределить B.x в иерархии классов с ромбовидными отношениями, при этом C.x будет продолжать наследовать от A.x
Моя цель — не редактировать класс A, B или C, поскольку они используются другими классами (например, классом E)
Однако до тех пор, пока изменения в классе A, B, C не изменят поведение других импортированных классов этих классов, редактирование A, B или C будет окей.
Я думаю, что MRO: D -> B -> C -> A
Означает ли это, что A можно переопределить только один раз?

Пример кода — попытка 1

from dataclasses import dataclass

@dataclass
class A:
@property
def x(self):
return 'a'

@dataclass
class B(A):
def B_method(self):
print(f'{self.x}_B_method')
return

@dataclass
class C(A):
def C_method(self):
print(f'{self.x}_C_method')
return

@dataclass
class D(B, C):
def D_method(self):
B.x = 'b'
self.B_method()
self.C_method()

class_D = D()
class_D.D_method()

Пример кода — попытка 2

from dataclasses import dataclass

@dataclass
class A:
@property
def x(self):
return 'a'

@dataclass
class B(A):
@property
def x(self):
return 'a'
def B_method(self):
print(f'{self.x}_B_method')
return

@dataclass
class C(A):
@property
def x(self):
return 'a'
def C_method(self):
print(f'{self.x}_C_method')
return

@dataclass
class D(B, C):
def D_method(self):
B.x = 'b'
self.B_method()
self.C_method()

class_D = D()
class_D.D_method()

Пример вывода

b_B_method
b_C_method

Желаемый результат

b_B_method
a_C_method


Подробнее здесь: https://stackoverflow.com/questions/793 ... -method-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»