То, что класс Library
имеет члена, который является Storage
, не означает, что он имеет все атрибуты Storage
.
Подумайте об этом так:
class Spam:
def __init__(self):
self.n = 2
Теперь Spam
использует класс int
для хранения своих данных. Вы ожидаете, что это будет работать как int
?
Здесь нет никакой разницы. То, что Library
использует Storage
для хранения своих данных, не означает, что является a Storage
.
Если вы действительно хотите, чтобы Library
был Storage
, а не просто использовал его, вы делаете это с наследованием:
class Library(Storage):
def __init__(self, some, args):
super().__init__(whatever, args, Storage, needs)
Но обычно вы этого не хотите. Вы просто хотите получить доступ к Storage
, а затем получить доступ к его членам:
class Library:
def __init__(self, some, args):
self.storage = Storage(whatever, args, Storage, needs)
lib = Library(whatever)
print(lib.storage._head)