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

StackOverflow https://stackoverflow.com/questions/1238606

  •  11-09-2019
  •  | 
  •  

Вопрос

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

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

Спасибо!

Это было полезно?

Решение

Вам не нужно наследовать от object иметь новый стиль в python 3.Все классы выполнены в новом стиле.

Другие советы

Я понимаю, что это старый вопрос, но стоит отметить, что даже в python 3 эти две вещи не совсем одно и то же.

Если вы явно наследуете от object, то , что вы на самом деле делаете , - это наследование от builtins.object независимо от того, на что это указывает в данный момент.

Следовательно, у меня мог бы быть какой-нибудь (очень дурацкий) модуль, который по какой-то причине переопределяет 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top