Можно ли динамически создавать/устанавливать переменные в подклассе внутри базового класса для нескольких подклассов, не затрагивая другие подклассы?
Например, возьмите этот код здесь:
class Base:
@classmethod
def __init__(cls,v):
cls.v=v
class sub1(Base):
Base.__init__(1)
class sub2(Base):
Base.__init__(5)
В этом коде при создании sub1
его атрибут v
равен 1
. Но когда создается sub2
, атрибут v
как sub1
, так и sub2
становится 5
. Думаю, я знаю, почему это так. Я предполагаю, что @classmethod
базового класса на самом деле устанавливает не атрибут подкласса, а его собственный атрибут. Затем этот атрибут наследуется в подклассах. Мой вопрос: как я могу использовать этот тип наследования для установки атрибутов подклассов, а не атрибутов базового класса, которые наследуются.
Другими словами, я хотел бы иметь возможность использовать аналогичную структуру, если это возможно (или, по крайней мере, простую), чтобы выполнить настройку атрибутов в подклассах, которые являются специфическими для подклассов, а не просто глобально унаследованы от базового класса. .
Это вообще возможно?
v = 1
вsub1
иv = 5
вsub2
? Присваивания в теле оператора класса вне любого метода уже определяют атрибуты класса; вам не нужен специальный метод, чтобы сделать это. Преобразование__init__
вclassmethod
звучит так, как будто вам действительно нужен метакласс, но это огромное излишество, если вы просто хотите установить атрибут класса... - person ShadowRanger   schedule 24.01.2018