如何针对该类的帮助文件正确组织Python类定义?

时间:2011-08-04 00:53:33

标签: python package organization

之前可能已经提出这个问题,但我找不到我的具体问题的答案(相当一般......)

这是我的问题的一个例子。假设我的包名为'school',我有一个名为'book'的类,其中包含.py文件,其中包含其方法的内容。我不确定如何组织它以使import语句看起来不奇怪。

如何整理文件?

/school/
        pencil/
        book/
             __init__.py
             read.py
             burn.py
             book.py

我希望能够做到这样的事情,因为它最有意义:

from school import Book
b = Book(name="The Bible")
b.read()

但是从上面的文件结构中,我必须这样做:

from school.book import Book
b = Book(....etc

OR

from school import book
b = book.Book(...etc

这些都很笨拙/重复......我在这里缺少什么?

1 个答案:

答案 0 :(得分:7)

你认为包与我们认为的类混淆。就个人而言,我将每个类定义和与该类直接相关的所有函数放在同一个.py文件中。例如,读取不是一个对象,所以我将它作为一个函数放在Book类下,而不是它自己的.py文件。所以,结构看起来像这样。

/school/
    pencil.py
    book.py

在book.py中,你有这样的东西

class Book():
    def __init__(self,name,author,isbn,your_variable_here):
        #Your init method

    def read(self,kid):
        return "{0} is reading {1}.".format(kid,self.name)

    def burn(self,library,lighter):
        library.remove(self)
        lighter.light(self)
        return "Preparing to burn people."

然后,你的导入就像这样。

from school import book
    b = book.Book("The Art of War","Sun Tzu",'999342052X','Books rock!')
    b.read(ike) #This assumes ike is an object, probably of the class Student, defined and imported from elsewhere
    b.burn(library,lighter) #Once more, I'm assuming these are objects for which you've imported the definition and defined them earlier.

这个系统的优势在于它更贴近现实模型。而不是由文件结构捆绑的一堆函数(正如您所指出的那样,可以进行复杂化),而是按类将其分组为逻辑组和构造。但是,我认为学生应该具有读取功能,并且库应该具有结帐功能,只留下具有刻录功能的书籍。但那是因为书不读,人们会这样做。书籍不会检查,图书馆也可以。这是一个关于如何组织它的问题。