Не могу вызвать атрибут _head в моем классе Python, который я создал - PullRequest
0 голосов
/ 04 июля 2018

У меня есть 2 класса, один класс называется хранилищем и один класс называется библиотекой. Класс хранения имеет список, состоящий из узлов.

Класс Library должен иметь внутри себя объект хранения для хранения своих данных.

Я хочу, чтобы при вызове любого из методов хранения они работали и внутри класса библиотеки.

У меня есть метод, который получает головной узел списка, и он прекрасно работает, когда я делаю следующее:

objstor = Storage()
# I add some nodes to the list
print(objstor._head) and this works and gives me the first nodes head

Когда я создаю библиотечный класс, который использует класс хранения для хранения своих данных, это происходит:

objlib = Library()
# i add data to the storage class within the library class
print(objlib._head) gives me an error ''Library' object has no attribute '_head'

Что здесь происходит?

1 Ответ

0 голосов
/ 04 июля 2018

То, что класс 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)
...