Python class 和书柜

Python class and book counter

我正在写一本 class 名为“书”的书。每本书都应该有一个标题和一个作者。 class应该可以自动统计书本数量

我卡在这里-刚开始-不知道如何让这个方法统计书籍。

class Book:
author: str = ""
title: str = ""
 def __init__(self, author, title):
     self.author = author
     self.title = title

..有什么建议吗?

我是这样做的,书架里面有书:

class Book:
     def __init__(self, author, title):
        self.author = author
        self.title = title
class Shelf:
    def __init__(self, books=[]):
        self.books = books
    def add_book(self,book):
        self.books.append(book)
    def count_books(self):
        return len(self.books)
Book_one = Book('Me1','Test1')
Book_two = Book('Me2','Test2')
Book_three = Book('Me3','Test3')
shelf = Shelf()
shelf.add_book(Book_one)
shelf.add_book(Book_two)
shelf.add_book(Book_three)
print(f'You have {shelf.count_books()} in your shelf')

你的逻辑有问题。

每本书的实例应该是独立的,为什么它应该 notice/changed 由其他书? 考虑创建父 class 书籍,书籍的每个实例都会增加一个书籍计数器。

如果出于任何原因,您仍想在本书 class 中执行此操作,请创建一个 class 属性,并在每个调用的 __init__() 中修改它您创建的书。

考虑阅读 -

  1. Achieving loose coupling
  2. Python Class Attributes

基本上正如用户 IlayG01 所说,您可以在 class 中实现一个计数器,或者使用一个超级 class 来计算创建的书籍。

class Book:
   author: str = ""
   title: str = ""
   counter = 0
   def __init__(self, author, title):
      self.author = author
      self.title = title
      Book.counter += 1

我认为这会奏效,但还有一个更 'profound' 的答案是拥有一个超级 class “书籍”,您可以在其中创建“书籍”的实例并在那里计数.

编辑:我在网上查了一下,发现了一个类似的解决方案,它是一个“员工”class。

这是website's答案:

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1