写一个名为 Book 的类定义。 Book 类应该具有书名、作者姓名和出版商名称的数据属性。该类还应具有以下内容:
一个 _ init _ 类的方法。该方法应该为每个数据属性接受一个参数。
每个数据属性的访问器和修改器方法。
一个 _ str _ 方法,它返回一个指示对象状态的字符串。
下面我附上了我的代码。每当我尝试运行它时,我什么也得不到。谁能告诉我我做错了什么?谢谢!:
class Book:
# Initializer
def __init__(self,title,author,publisher):
self.__title = title
self.__authr = author
self.__publr = publisher
# Mutators
def set_title(self,title):
self.__title = title
def set_author(self,author):
self.__authr = author
def set_publr(self,publisher):
self.__publr = publisher
# Accessors
def get_title(self):
return self.__title
def get_author(self):
return self.__authr
def get_publr(self):
return self.__publr
# _str_method
def __str__(self):
book = Book (title=None,author=None, publisher=None)
book.set_title('Ends with us')
book.set_author('Colleen Hoover')
book.set_publr('Simon & Schuster')
return("Book's Title:", + self.__title + \
"\nAuthor:", + str(self.__authr) + \
"\nPublisher: $", + str(self.__publr))
您的代码的问题似乎与 str 方法的实现有关。您可以通过以下一些更改来修复它:
删除创建新 Book 对象并设置其属性的行。相反,您应该返回当前 Book 对象的属性值。
删除返回语句中字符串文字后面的逗号。这些逗号会导致语法错误。
不是用 + 连接字符串,而是使用 f-strings 将字符串格式化为对象属性的值。
def __str__(self):
return f"Book's Title: {self.__title}\nAuthor: {self.__author}\nPublisher: {self.__publisher}"
现在您可以为此创建对象:
book1 = Book("Ends with Us", "Colleen Hoover", "Simon & Schuster")
print(book1)
看起来你不小心把应该 create
Book
的代码放在你的 __str__
方法中:
# _str_method
def __str__(self):
book = Book (title=None,author=None, publisher=None)
book.set_title('Ends with us')
book.set_author('Colleen Hoover')
book.set_publr('Simon & Schuster')
return("Book's Title:", + self.__title + \
"\nAuthor:", + str(self.__authr) + \
"\nPublisher: $", + str(self.__publr))
把所有的东西都拿出来放在外面班级(在缩进的顶层),像这样:
# _str_method
def __str__(self):
return("Book's Title:", + self.__title + \
"\nAuthor:", + str(self.__authr) + \
"\nPublisher: $", + str(self.__publr))
book = Book(title=None, author=None, publisher=None)
book.set_title('Ends with us')
book.set_author('Colleen Hoover')
book.set_publr('Simon & Schuster')
然后在最后,你可以通过打印你的
__str__
来测试你的Book
方法:
print(book)