С учетом контекста из комментариев:
Итак ... вы не хотите иметь дочерний объект, вы просто хотите иметь больше методов в исходном классе? Но не помещая эти методы в исходный класс?
@ h4ze, это звучит правильно! Мне нужна фрагментация
Если вы явно укажете имя класса, вы можете передать что-нибудь как self
.
d = Stats()
GameStats.fixture_stats(d)
Это называется утиной печатью - нас не волнует фактическая тип объекта, нас интересует, что он делает: «если он плавает как утка и крякает как утка, это утка».
Это позволяет вам пропустить любой объект в любом месте ... Но это также означает, что объект должен «плавать» и «крякать», как изначально ожидаемый объект, верно?
Мы знаем, что все GameStats
объекты являются Stats
объектами (потому что наследуются), но не наоборот. - Это означает, что ваши методы в GameStats
могут использовать только то, что есть у Stats
.
Но только то, что вы можете сделать что-то, не означает, что вы должны . Вы не можете использовать потенциал своего дочернего класса - вы просто используете класс в качестве хранилища методов для другого класса!
Лучше было бы сделать это наоборот - использовать мульти-наследование. Каждый родительский класс будет иметь то, что необходимо для выполнения его действий (и, конечно, вы установите все эти части в вашем дочернем init) и эти действия - таким образом, минимизируете необходимость перезаписи методов в child.
Подумайте об этом как и интерфейсы в других языках, но с уже реализованными методами (обычно вы должны реализовать интерфейс - вызывая больше вещей в классе).
Или просто сделать нормальные функции , документ (в строках документации), что они должны взять данный объект и использовать его. Вы можете хранить эти функции в разных модулях, предоставляя им разные пространства имен - обеспечивая желаемую «фрагментацию».