Как сделать статическое свойство класса в питоне?
📁 python, ошибка
Пробую так:
class ChatCodes: _chat = 'cht' @property def chat(self): retu self._chatесли использую так:
print(ChatCodes.chat + 'any_str')то появляется ошибка:
unsupported operand type(s) for +: 'property' and 'str'
как правильно создать статическое свойство?
В принципе, объявленный параметр класса со значением - уже может использоваться как статическое свойство
>>> class MyClass:... param = ""value""...>>> MyClass.param'value'>>>Это же значение будет доступно и для экземпляра класса. Разве что у экземпляра есть опасность, что значение свойства изменится в процессе работы. Тут стоит позаботиться, чтоб этот параметр не изменялся и/или чтоб обращение к свойству шло исключительно через имя класса, а не экземпляра.
Можно использовать статический метод - объявляется с помощью аннотации @staticmethod. Правда и обращаться к нему придётся как к методу, а не свойству
>>> class MyClass:... @staticmethod... def param():... retu ""value""...>>> MyClass.param<function param at 0x04962A30>>>> MyClass.param()'value'>>>Если достаточно ленивой инициализации (то есть обращаться к свойству будем через экземпляр класса), то можно использовать аннотацию @property
>>> class MyClass:... @property... def param(self):... retu ""value""...>>> MyClass.param<property object at 0x0474B210>>>> MyClass.param()Traceback (most recent call last): File ""<stdin>"", line 1, in <module>TypeError: 'property' object is not callable>>>>>> m = MyClass()>>> m.param'value'Ну и вариант на любителя (на случай, когда значение свойства нужно вычислить):
>>> class MyClass:... def _method_to_create_static_prop():... retu ""value""... param = _method_to_create_static_prop()... del _method_to_create_static_prop...>>> MyClass.param'value'>>> MyClass._method_to_create_static_propTraceback (most recent call last): File ""<stdin>"", line 1, in <module>AttributeError: class MyClass has no attribute '_method_to_create_static_prop'>>> Войдите чтобы оставить ответ