В Python я хочу, чтобы у класса были некоторые «константы» (фактически, переменные), которые будут общими для всех подклассов. Есть ли способ сделать это с помощью понятного синтаксиса? Сейчас использую:
class Animal:
SIZES=["Huge","Big","Medium","Small"]
class Horse(Animal):
def printSize(self):
print(Animal.SIZES[1])
и мне интересно, есть ли лучший способ сделать это или способ сделать это без необходимости писать «Животное». перед размерами. Спасибо! edit: забыл упомянуть, что лошадь наследуется от животного.
SIZES
никогда не меняется, определенно используйте кортеж вместо списка. Вроде так("Huge","Big","Medium","Small")
Ответы:
Поскольку
Horse
это подклассAnimal
, вы можете просто изменитьс участием
Тем не менее, вы должны помнить, что это
SIZES[1]
означает «большой», поэтому, вероятно, вы могли бы улучшить свой код, сделав что-то вроде:Кроме того , вы можете создать промежуточные классы:
HugeAnimal
,BigAnimal
, и так далее. Это будет особенно полезно, если каждый класс животных будет содержать разную логику.источник
Вы можете получить доступ
SIZES
с помощьюself.SIZES
(в методе экземпляра) илиcls.SIZES
(в методе класса).В любом случае вам нужно будет четко указать, где искать
SIZES
. Альтернативой является установкаSIZES
модуля, содержащего классы, но тогда вам нужно определить все классы в одном модуле.источник
источник
Расширяя ответ betabandido, вы можете написать функцию для вставки атрибутов в виде констант в модуль:
источник
print SIZE_BIG
вне класса будет то же самое? Будет ли он доступен для редактированияAnimal.SIZE_HUGE = 'Small'
?