Позволяет есть примерOverride внутренний класс
class A:
class B:
def f(self):
return 1
def a(self):
return A.B().f()
def b(self):
return self.B().f()
class C(A):
class B(A.B):
def f(self):
return 2
print(A().a())
print(A().b())
print(C().a())
print(C().b())
произведут
1
1
1
2
Я хочу сделать что-то, что он производит
1
1
2
2
Как я могу переопределить класс А, так что оба метода, a и b возвращают 2?
Я работаю с сгенерированным кодом с antlr. То, что я хочу сделать, - это, например, переопределить методы __str __(), чтобы получить более качественную информацию. Он продолжает генерировать код, например MyLanguageParser.RootContext() вместо self.RootContext(), и теперь я хочу переопределить все, что мне нужно, чтобы справиться с кодом методов, где вызываются классы.
Есть ли у вас какие-либо решения? Я знаю, что я еще не лучший с Python.
Возможно, это невозможно, и решение заключается в изменении сгенерированного кода, но я слышал, что это очень плохая идея.
Edit:
Класс A генерируется и неизменен
То, что я думал, что это что-то вроде
A.B = C.B
print(A().a())
print(A().b())
print(C().a())
print(C().b())
сгенерирует
2
2
2
2
Я не знаю, если это законно. На самом деле я не буду использовать класс A, но остальная часть сгенерированного кода может его использовать. Я не знаю, безопасно ли это. Edit 2: Исправлена ошибка с отсутствием самости
Вам необходимо изменить способ генерации кода или переопределить 'a' и' b' вместо 'B'. – user2357112
позволяет сказать, что класс A сгенерирован и неизменен. –
Это просто означает, что вы меняете вещи, которые управляют его поколением, а не редактируют сгенерированный код напрямую. – user2357112