之前可能已经提出这个问题,但我找不到我的具体问题的答案(相当一般......)
这是我的问题的一个例子。假设我的包名为'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
这些都很笨拙/重复......我在这里缺少什么?
答案 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.
这个系统的优势在于它更贴近现实模型。而不是由文件结构捆绑的一堆函数(正如您所指出的那样,可以进行复杂化),而是按类将其分组为逻辑组和构造。但是,我认为学生应该具有读取功能,并且库应该具有结帐功能,只留下具有刻录功能的书籍。但那是因为书不读,人们会这样做。书籍不会检查,图书馆也可以。这是一个关于如何组织它的问题。