Допустим, у нас есть класс A
, класс B
, который наследуется от A
и классов C
, D
и E
, которые наследуют от B
.поля во всех подклассов класса
Мы хотим, чтобы все эти классы имели атрибут _f
, инициализированный значением по умолчанию, и мы хотим, чтобы этот атрибут изменялся и имел отдельное значение для каждого экземпляра класса, то есть он не должен быть статическим, постоянное значение A
, используемое всеми подклассами.
Один из способов сделать это, чтобы определить _f
в способе А в __init__
, а затем полагаться на этот метод в подклассах:
class A:
def __init__(self):
self._f = 'default_value'
class B(A):
def __init__(self):
super(B, self).__init__()
class C(B):
def __init__(self):
super(C, self).__init__()
Есть ли хороший Pythonic способ избежать этого, и, возможно, избегать использования метаклассов ?
Обратите внимание, что если все реализации подкласса являются вызовом реализации суперкласса, вы можете оставить их вне. 'class B (A): pass' будет работать нормально. И вы ищете атрибут * class * или обычный атрибут * экземпляра *? Не могли бы вы привести менее абстрактный пример? – jonrsharpe
Зависит, если поле '_f' предназначено для обращения к изменяемому или неизменяемому типу. – Aya
Предполагается, что '_f' должно быть полем класса или поле экземпляра? – schwobaseggl