Python 我可以将创建的对象中的数据分配给子类对象变量吗?

Python 我可以将创建的对象中的数据分配给子类对象变量吗?,python,class,oop,Python,Class,Oop,我正试图完成一项关于创建一个仅使用类和对象的库管理系统的作业。 我已经完成了library类及其方法的学习,这些方法大部分是从catalog类继承而来的,catalog类拥有几乎所有管理图书馆目录的方法 现在,在继承Library类之后创建User类时,当我创建一个成员对象并尝试访问方法member.displayAllBooks(),它会出现以下错误: AttributeError:'Member'对象没有属性'distribute\u book\u count' 那么,有没有一种方法可以为成

我正试图完成一项关于创建一个仅使用类和对象的库管理系统的作业。 我已经完成了library类及其方法的学习,这些方法大部分是从catalog类继承而来的,catalog类拥有几乎所有管理图书馆目录的方法

现在,在继承Library类之后创建User类时,当我创建一个成员对象并尝试访问方法
member.displayAllBooks()
,它会出现以下错误:

AttributeError:'Member'对象没有属性'distribute\u book\u count'

那么,有没有一种方法可以为成员对象分配
图书管理员。不同的\u body\u count

Catalog.py

from Book import Book

class Catalog:
    def __init__(self):
        self.different_book_count = 0
        self.books = []

    #Only available to admin
    def _addBook(self, name, author, publish_date, pages):
        book = Book(name, author, publish_date, pages)
        self.different_book_count += 1
        self.books.append(book)
        return book

    #Only available to admin
    def _addBookItem(self, book, isbn, rack):
        book.addBookItem(isbn, rack)

    def searchByName(self, name):
        for book in self.books:
            if name.strip() == book.name:
                return book

    def searchByAuthor(self, author):
        for book in self.books:
            if author.strip() == book.author:
                return book

    def displayAllBooks(self):
        print('Books in catalog:', self.different_book_count)
        c = 0
        for book in self.books:
            c += book.total_count
            book.printBook()

        print('Total Book Count:', c)

    def _removeBookItem(self, name, isbn):
        book = self.searchByName(name)
        book_item = book.searchBookItem(isbn)
        book.removeBookItem(book_item)

    def _removeBookFromCatalog(self, name):
        book = self.searchByName(name)
        self.books.remove(book)
        self.different_book_count -= 1
        del book
from Catalog import Catalog
from Book import Book

class User:
    def __init__(self, name, location, age, aadhar_id):
        self.name = name
        self.location = location
        self.age = age
        self.aadhar_id = aadhar_id

class Librarian(User, Catalog):
    def __init__(self, name, location, age, aadhar_id, emp_id):
        super().__init__(name, location, age, aadhar_id)
        Catalog.__init__(self)
        self.emp_id = emp_id

    def __repr__(self):
        return self.name + self.location + self.emp_id

    def addBook(self, name, author, publish_date, pages):
        book = Book(name, author, publish_date, pages)
        self.different_book_count += 1
        self.books.append(book)
        return book

    def addBookItem(self, book, isbn, rack):
        super()._addBookItem(book, isbn, rack)

    def removeBookItem(self, name, isbn):
        super()._removeBookItem(name, isbn)

    def removeBookFromCatalog(self, name):
        super()._removeBookFromCatalog(name)

class Member(Librarian, Catalog):
    def __init__(self, name, location, age, aadhar_id, student_id):
        User.__init__(self, name, location, age, aadhar_id)
        self.student_id = student_id
        # self.different_book_count = super().different_book_count
        # self.books = super().books

    def __repr__(self):
        return self.name + ' ' + self.location + ' ' + self.student_id
User.py

from Book import Book

class Catalog:
    def __init__(self):
        self.different_book_count = 0
        self.books = []

    #Only available to admin
    def _addBook(self, name, author, publish_date, pages):
        book = Book(name, author, publish_date, pages)
        self.different_book_count += 1
        self.books.append(book)
        return book

    #Only available to admin
    def _addBookItem(self, book, isbn, rack):
        book.addBookItem(isbn, rack)

    def searchByName(self, name):
        for book in self.books:
            if name.strip() == book.name:
                return book

    def searchByAuthor(self, author):
        for book in self.books:
            if author.strip() == book.author:
                return book

    def displayAllBooks(self):
        print('Books in catalog:', self.different_book_count)
        c = 0
        for book in self.books:
            c += book.total_count
            book.printBook()

        print('Total Book Count:', c)

    def _removeBookItem(self, name, isbn):
        book = self.searchByName(name)
        book_item = book.searchBookItem(isbn)
        book.removeBookItem(book_item)

    def _removeBookFromCatalog(self, name):
        book = self.searchByName(name)
        self.books.remove(book)
        self.different_book_count -= 1
        del book
from Catalog import Catalog
from Book import Book

class User:
    def __init__(self, name, location, age, aadhar_id):
        self.name = name
        self.location = location
        self.age = age
        self.aadhar_id = aadhar_id

class Librarian(User, Catalog):
    def __init__(self, name, location, age, aadhar_id, emp_id):
        super().__init__(name, location, age, aadhar_id)
        Catalog.__init__(self)
        self.emp_id = emp_id

    def __repr__(self):
        return self.name + self.location + self.emp_id

    def addBook(self, name, author, publish_date, pages):
        book = Book(name, author, publish_date, pages)
        self.different_book_count += 1
        self.books.append(book)
        return book

    def addBookItem(self, book, isbn, rack):
        super()._addBookItem(book, isbn, rack)

    def removeBookItem(self, name, isbn):
        super()._removeBookItem(name, isbn)

    def removeBookFromCatalog(self, name):
        super()._removeBookFromCatalog(name)

class Member(Librarian, Catalog):
    def __init__(self, name, location, age, aadhar_id, student_id):
        User.__init__(self, name, location, age, aadhar_id)
        self.student_id = student_id
        # self.different_book_count = super().different_book_count
        # self.books = super().books

    def __repr__(self):
        return self.name + ' ' + self.location + ' ' + self.student_id

问题是您从未调用过
Catalog.\uuuu init\uuu
,因此
Catalog
类的所有属性都不会出现在继承的类中

我为什么得出这个结论

因为您的
super()<代码>目录。\uuuu init\uuuu
不支持参数


对于从
Catalog
继承的类,您必须直接调用
Catalog
\uuu init\uuuuuuuuu

但是使用Catalog。直接在成员类内部的\uuuu init\uuuuu将为我创建一个新的Catalog对象,对吗?(我也试过了,所以可以确认)@AshishKaul哦,不。调用
Catalog()
——相当于
Catalog.\uuu new\uuu()
——创建一个新的Catalog对象。调用
Catalog.\uuuu init\uuuu()
初始化属性。不要把两者混为一谈。