В более старой версии python, когда вы создаете класс в python, он может наследовать от объекта, который, насколько я понимаю, специальный встроенный элемент python, который позволяет вашему объекту быть объектом нового стиля.
А как насчет более новой версии (> 3.0 и 2.6)? Я погуглил об объекте класса, но получил так много результатов (по очевидным причинам). Намек?
Спасибо!
python
python-3.x
Томас
источник
источник
Ответы:
Вам не нужно наследовать от,
object
чтобы иметь новый стиль в python 3. Все классы имеют новый стиль.источник
object
независимо от того, вводится ли явный(object)
или нет в Python 3.1Я понимаю, что это старый вопрос, но стоит отметить, что даже в python 3 эти две вещи не совсем одно и то же.
Если вы явно наследуете от
object
, то, что вы на самом деле делаете, наследует от,builtins.object
независимо от того, на что это указывает в данный момент.Поэтому у меня мог быть какой-то (очень дурацкий) модуль, который по какой-то причине переопределяет объект. Назовем этот первый модуль newobj.py:
import builtins old_object = builtins.object # otherwise cyclic dependencies class new_object(old_object): def __init__(self, *args, **kwargs): super(new_object, self).__init__(*args, **kwargs) self.greeting = "Hello World!" builtins.object = new_object #overrides the default object
Затем в другом файле ("klasses.py"):
class Greeter(object): pass class NonGreeter: pass
Затем в третьем файле (который мы действительно можем запустить):
import newobj, klasses # This order matters! greeter = klasses.Greeter() print(greeter.greeting) # prints the greeting in the new __init__ non_greeter = klasses.NonGreeter() print(non_greeter.greeting) # throws an attribute error
Итак, вы можете видеть, что в случае, когда он явно наследуется от объекта, мы получаем другое поведение, чем там, где вы разрешаете неявное наследование.
источник