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