Нужно или полезно наследовать от объекта Python в Python 3.x? - PullRequest
68 голосов
/ 06 августа 2009

В более старой версии Python, когда вы создаете класс в Python, он может наследоваться от объекта , насколько я понимаю, специального встроенного элемента Python, который позволяет вашему объекту быть объектом нового стиля .

А как насчет более новой версии (> 3.0 и 2.6)? Я гуглил об объекте класса, но получаю очень много результатов (по очевидным причинам). Любой намек?

Спасибо!

Ответы [ 2 ]

66 голосов
/ 06 августа 2009

Вам не нужно наследовать от object, чтобы иметь новый стиль в Python 3. Все классы имеют новый стиль.

54 голосов
/ 26 августа 2017

Я понимаю, что это старый вопрос, но стоит отметить, что даже в 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

Итак, вы можете видеть, что в случае, когда он явно наследуется от объекта, мы получаем поведение, отличное от того, где вы разрешаете неявное наследование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...