«Правильный» способ сделать то, что вы хотите, чтобы переопределить метод, чтобы не перезаписать его. Вы делаете это, создавая подкласс класса и предоставляя новое определение для одного или нескольких своих методов.
Прежде всего, хотя есть ошибка в определении classA.functionA()
- вам нужно включить self
аргумент:
class classA:
def functionA(self):
print('Hello World!')
С этим исправил то вам необходимо определить новый подкласс classC
в fileB.py
, отменяющий functionA()
:
from fileA import classC
class classD(classC):
def functionA(self):
print('classD.functionA(): Hello World!')
>>> c = classC()
>>> c.functionA()
Hello World!
>>> d = classD()
>>> d.functionA()
classD.functionA(): Hello World!
стоит отметить, что классы classB
и classC
показаться бессмысленным, учитывая, что (как показано), они не вносят изменений в базовый класс A
. Таким образом, вы можете напрямую подкласса classA
.
Это самый базовый объектно-ориентированный дизайн/программирование, поэтому я предлагаю вам посмотреть учебник или два.
Как я сказал выше, это правильный способ сделать это. Кроме того, можно заменить/переписать метод следующим образом:
from fileA import classC
def my_function_A(self):
print('my_function_A(): Hello World!')
>>> c = classC()
>>> c.functionA()
Hello World!
>>> classC.functionA = my_function_A # overwrite the method
>>> classC().functionA()
my_function_A(): Hello World!
>>> c.functionA()
my_function_A(): Hello World!
Но наиважнейшая предпочтительнее перезаписи. Одна из проблем заключается в том, что если вы перезапишете этот метод, все предыдущие экземпляры classC
также будут затронуты, как показано в последней строке вышеприведенного кода.
Я не уверен, чего вы пытаетесь достичь. Вы можете использовать тот же синтаксис в 'fileB', чтобы переопределить' classC', как вы это делали в 'fileA'. Есть ли какой-то метод, который вы динамически определяете в 'fileB'? – rmorshea