Пробую так:
class ChatCodes:
_chat = 'cht'
@property
def chat(self):
return 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():
... return "value"
...
>>> MyClass.param
Если достаточно ленивой инициализации (то есть обращаться к свойству будем через экземпляр класса), то можно использовать аннотацию @property
>>> class MyClass:
... @property
... def param(self):
... return "value"
...
>>> MyClass.param
Ну и вариант на любителя (на случай, когда значение свойства нужно вычислить):
>>> class MyClass:
... def _method_to_create_static_prop():
... return "value"
... param = _method_to_create_static_prop()
... del _method_to_create_static_prop
...
>>> MyClass.param
'value'
>>> MyClass._method_to_create_static_prop
Traceback (most recent call last):
File "
Комментариев нет:
Отправить комментарий