Константы класса в python

В python я хочу, чтобы класс имел некоторые «константы» (практически, переменные), которые будут распространены во всех подклассах. Есть ли способ сделать это с дружественным синтаксисом? Сейчас я использую:

class Animal: SIZES=["Huge","Big","Medium","Small"] class Horse(Animal): def printSize(self): print(Animal.SIZES[1]) 

и мне интересно, есть ли лучший способ сделать это или способ сделать это, не записывая «Animal». до размеров. Благодаря! edit: забыл упомянуть, что лошадь наследуется от животного.

4 Solutions collect form web for “Константы класса в python”

Поскольку Horse является подклассом Animal , вы можете просто изменить

 print(Animal.SIZES[1]) 

с

 print(self.SIZES[1]) 

Тем не менее, вам нужно помнить, что SIZES[1] означает «большой», поэтому, возможно, вы могли бы улучшить свой код, выполнив что-то вроде:

 class Animal: SIZE_HUGE="Huge" SIZE_BIG="Big" SIZE_MEDIUM="Medium" SIZE_SMALL="Small" class Horse(Animal): def printSize(self): print(self.SIZE_BIG) 

Кроме того, вы можете создавать промежуточные классы: HugeAnimal , BigAnimal и т. Д. Это было бы особенно полезно, если бы каждый класс животных содержал бы разную логику.

Вы можете получить SIZES с помощью self.SIZES (в методе экземпляра) или cls.SIZES (в методе класса).

В любом случае вам нужно будет указать, где найти SIZES . Альтернативой является размещение SIZES в модуле, содержащем классы, но тогда вам нужно определить все классы в одном модуле.

 class Animal: HUGE = "Huge" BIG = "Big" class Horse: def printSize(self): print(Animal.HUGE) 

Расширяясь на ответе бетабандидо, вы можете написать функцию для вставки атрибутов в константы в модуль:

 def module_register_class_constants(klass, attr_prefix): globals().update( (name, getattr(klass, name)) for name in dir(klass) if name.startswith(attr_prefix) ) class Animal(object): SIZE_HUGE = "Huge" SIZE_BIG = "Big" module_register_class_constants(Animal, "SIZE_") class Horse(Animal): def printSize(self): print SIZE_BIG 
  • от месяца до месяца и наоборот в python
  • создать строку переменной длины в python
  • Смутно о модулях и функциях python
  • Django Celery отправить электронное письмо электронной почты не работает
  • Как определить функцию, которая будет проверять, имеет ли строка пробелы после завершения предложения?
  • Преобразование списка в нижний регистр
  • Может ли программа Native Client (NaCl) записываться на языках, отличных от C или C ++?
  • Изменение глобальной переменной внутри функции
  • Каков самый быстрый способ проверить, имеет ли класс определенную функцию?
  • Считываем распечатку python dict (), отсортированную по ключу
  • Как открыть ppt-файл с помощью Python
  • Python - лучший язык программирования в мире.