Необходимо или полезно наследовать от объекта python в Python 3.x?


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

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

спасибо!

2 56

2 ответа:

вам не нужно наследовать от 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

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