any[]
означает «Массив, содержащий любое значение».
Массивы имеют свойство keys
(хотя это функция, поэтому, вероятно, не то, что вы ищете), но не имеют свойства key
.
Возможно, вы хотите получить значения из массива и посмотреть их key
свойства.
Книга немного устарела в отношении вызова подкласса-суперкласса. Он также немного устарел в отношении встроенных классов подкласса.
В настоящее время это выглядит так.
class FileInfo(dict):
"""store file metadata"""
def __init__(self, filename=None):
super( FileInfo, self ).__init__()
self["name"] = filename
Обратите внимание на следующее.
Мы можем напрямую создавать подклассы встроенных классов, например dict
, list
, tuple
и т. Д.
Функция super
обрабатывает отслеживание суперклассов этого класса и вызывает в них соответствующие функции.
На самом деле у вас нет для вызова методов __ init __
базового класса (классов), но вы обычно хотят, чтобы сделал это, потому что базовые классы выполнят там некоторые важные инициализации, которые необходимы для работы методов остальных классов.
Для других методов это зависит от ваших намерений. Если вы просто хотите что-то добавить к поведению базовых классов, вам нужно вызвать метод базовых классов дополнительно к вашему собственному коду.
Если класс FileInfo имеет более одного класса-предка, вам определенно следует вызвать все их функции __init __ (). Вы также должны сделать то же самое для функции __del __ (), которая является деструктором.
Да, вы должны вызвать __ init __
для каждого родительского класса. То же самое касается функций, если вы переопределяете функцию, которая существует в обоих родителях.