Подтвердить что ты не робот

В Python, как я могу ссылаться на класс в общем статическом ключе, например ключевое слово PHP "self"?

PHP-классы могут использовать ключевое слово self в статическом контексте, например:

<?php
class Test {
  public static $myvar = 'a';
  public static function t() {
     echo self::$myvar; // Generically reference the current class.
     echo Test::$myvar; // Same thing, but not generic.
  }
}
?>

Очевидно, я не могу использовать "я" таким образом в Python, потому что "я" относится не к классу, а к экземпляру. Так есть способ, которым я могу ссылаться на текущий класс в статическом контексте в Python, подобно PHP "self"?

Я предполагаю, что я пытаюсь сделать, скорее, не-pythonic. Не уверен, хотя, я новичок в Python. Вот мой код (с использованием рамки Django):

class Friendship(models.Model):
  def addfriend(self, friend):
    """does some stuff"""

  @staticmethod # declared "staticmethod", not "classmethod"
  def user_addfriend(user, friend): # static version of above method
    userf = Friendship(user=user) # creating instance of the current class
    userf.addfriend(friend) # calls above method

# later ....
Friendship.user_addfriend(u, f) # works

Мой код работает так, как ожидалось. Я просто хотел знать: есть ли ключевое слово, которое я мог бы использовать в первой строке статического метода вместо "Дружбы"?

Таким образом, если имя класса изменяется, статический метод не нужно редактировать. В этом случае статический метод должен быть отредактирован, если имя класса изменится.

4b9b3361

Ответ 1

Это должно сделать трюк:

class C(object):
    my_var = 'a'

    @classmethod
    def t(cls):
        print cls.my_var

C.t()

Ответ 2

Во всех случаях self.__class__ - это класс объекта.

http://docs.python.org/library/stdtypes.html#special-attributes

В (очень) редком случае, когда вы пытаетесь возиться со статическими методами, вам действительно нужно classmethod.

class AllStatic( object ):
    @classmethod
    def aMethod( cls, arg ):
        # cls is the owning class for this method 

x = AllStatic()
x.aMethod( 3.14 )