Питон: сам. класс против типа (self) [дубликат]



этот вопрос уже есть ответ здесь:




  • Разница между типом (obj) и obj.__класс__

    3 ответы



мне интересно, есть ли разница между



class Test(object):
def __init__(self):
print self.__class__.__name__


и



class Test(object):
def __init__(self):
print type(self).__name__


?



есть ли причина предпочесть одно или другое?



(в моем случае использования я хочу использовать его чтобы определить имя регистратора, но я думаю, что это не имеет значения)

299   2  

2 ответов:

>>> class Test(object): pass
>>> t = Test()
>>> type(t) is t.__class__
True
>>> type(t)
__main__.Test

так что эти двое-одно и то же. Я хотел бы использовать self.__class__ так как это более очевидно, что это такое.

однако, type(t) не будет работать для классов старого стиля, так как тип экземпляра класса старого стиля -instance в то время как тип экземпляра класса нового стиля-это его класс:

>>> class Test(): pass
>>> t = Test()
>>> type(t) is t.__class__
False
>>> type(t)
instance

насколько мне известно, последнее-это просто более приятный способ сделать первое.

Это на самом деле не так уж необычно в Python, считать repr(x), который просто называет x.__repr__() или len(x), который просто называет x.__len__(). Python предпочитает использовать встроенные модули для общих функций, которые вы, вероятно, будете использовать в диапазоне классов, и обычно реализует их путем вызова __x__() методы.

Comments

    Ничего не найдено.