Python: ссылка на класс в общем случае в методе экземпляра? - PullRequest
1 голос
/ 19 сентября 2011

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

Как вы ссылаетесь на класс в общем случае в методе экземпляра?

, например

#!/usr/bin/python
class a:
    b = 'c'
    def __init__(self):
        print(a.b) # <--- not generic because you explicitly refer to 'a'

    @classmethod
    def instance_method(cls):
        print(cls.b) # <--- generic, but not an instance method

Ответы [ 2 ]

3 голосов
/ 19 сентября 2011

В классах нового стиля доступен атрибут self.__class__.

В Python, совместимом с 3.x, все классы имеют новый стиль.

До версии 3.x вы используете class a(object): чтобы объявить это новым стилем.

1 голос
/ 19 сентября 2011

Для классов старого стиля (если ваш код является кодом Python 2.x и ваш класс не наследуется от object), используйте свойство __class__ .

def __init__(self):
    print(self.__class__.b) # Python 2.x and old-style class

Для классов нового стиля (если ваш код - код Python 3), используйте type:

def __init__(self):
    print(self.__class__.b) # __class__ works for a new-style class, too
    print(type(self).b)

Внутри type используется свойство __class__.

...