Ответ 1
Вам не нужно наследовать от object
, чтобы иметь новый стиль в python 3. Все классы являются новыми.
В более старой версии python, когда вы создаете класс в python, он может наследовать от объекта, который до сих пор понимает специальный встроенный элемент python, который позволяет вашему объекту быть объектом нового стиля.
Как насчет более новой версии ( > 3.0 и 2.6)? Я googled о объекте класса, но я получаю так много результата (по очевидным причинам). Любой намек?
Спасибо!
Вам не нужно наследовать от object
, чтобы иметь новый стиль в python 3. Все классы являются новыми.
Я понимаю, что это старый вопрос, но стоит отметить, что даже в 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
Итак, вы можете видеть, что в случае, когда он явно наследуется от объекта, мы получаем другое поведение, чем там, где вы допускаете неявное наследование.