#python #static-methods #django-rest-framework
#python #статические методы #django-rest-framework
Вопрос:
У меня есть класс, на который я хочу ссылаться self
изнутри статического метода. Есть ли способ сделать это?
class User(object):
email = "username"
password = "********"
@staticmethod
def all():
return {"ex": self.password}
print(User.all())
Комментарии:
1. Какова ваша цель? Вы пытаетесь напечатать все
User
s’ атрибуты?2. @EthanFurman Это используется в качестве объекта-заполнителя для передачи набора констант в сериализатор в api. Итак, чтобы ответить на ваш вопрос, да, это так.
Ответ №1:
Способ сделать это с помощью метода classmethod вместо этого. Способ, которым это работает, заключается в том, что первым аргументом является сам класс, к переменным которого вы можете получить доступ с помощью оператора dot .
Например:
class User(object):
email = "username"
password = "********"
@classmethod
def all(cls):
return {"ex": cls.password}
print(User.all())
https://docs.python.org/2/library/functions.html#classmethod
Комментарии:
1. Начиная с Python 3.11, на случай, если вы также захотите ввести подсказку, библиотека
typing_extensions
содержитSelf
ссылку на класс in-scope.
Ответ №2:
Нет, не существует.
Смысл a staticmethod
в том, что ему не нужна информация ни об экземпляре ( self
), ни о классе (обычно называемом cls
) для выполнения своей работы.
Если вам staticmethod
нужно self
, то это не staticmethod
, и вы должны просто определить это нормально.