Класс Python со статическим методом и ссылкой на self

#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 , и вы должны просто определить это нормально.