Python 多文件程序
Python Multiple file program
对于较大的程序,为了更有条理,我一直在考虑将我的代码分成不同的 .py
文件,并让主文件在需要时调用这些文件。我环顾四周,看到很多关于为 Python 创建目录和 SystemPath
的评论。那些可以在几台计算机之间分发的程序的合理选择是什么?作为测试,我尝试以 assemble 为例:
这是与 main
在同一目录中名为 grades
的 class
class student:
def __init__(self):
self.name = ""
self.score = 0
self.grade = 0
def update(self,name,score,grade):
self.score = score
self.name = name
self.grade = grade
print self.score,self.name,self.grade
s = student()
s.update(name,score,grade)
这是我目前的主要脚本:
from grades import score
import random
name = 'carl'
score = random.randrange(0,100)
grade = 11
s = student()
s.score(name,score,grade)
关于这个方法我一般有一些问题:
- 有没有办法从不同的文件导入所有文件,或者我是否需要指定每个文件 class?
- 如果我只有一个函数,是否可以将其作为函数导入,或者只能通过 class 导入?
- 为什么当我调用一个 class 时,通常我必须为它创建一个变量,如下例所示?
# way that works
s = student()
s.update(name,score,grade)
# incorrect way
student.update(name,score,grade)
感谢您花时间思考我的问题。
1: Is there a way to import all from different file or do i need to
specify each individual class?
您可以使用 "wildcard import",但您可能不应该使用。看
Should wildcard import be avoided?
- If i just had a function, is it possible to import it just as a
function or can you only import via a class?
函数可以完全独立于 Python 中的 classes。
3.Why is it when i call upon a class in general i have to make a variable for it as in the example below?
您应该阅读面向对象编程。在基本情况下,您必须实例化 class 的实例才能使用 class 的功能。在您的示例中,class 学生描述了成为学生的意义,而陈述
s = student()
创建一个学生并将其命名为 "s"。
我认为在阅读了一些有关面向对象的编程之后应该清楚这一点。
一般对一个程序的源码进行分割,Python使用模块来分割,对应一个*.py文件。那么对于你的3个问题:
- 你可以通过
import module_name.*
导入整个"module content"(函数,class,全局变量,...)
对于函数,如果是class(成员方法,class方法或静态方法)中的函数,你不仅可以导入函数,还应该import class 使用方法;如果是模块下的函数,可以通过import module_name.function_name
单独导入函数
update是学生class的成员函数,所以要通过实例来使用。如果是class方法或者静态方法,可以通过你写的class名字来使用
- 是的。
您可以将 student
的实例从其他脚本导入主脚本,如下所示:
from grades import s
# if your first script is called grades.py
import random
name = 'carl'
score = random.randrange(0,100)
grade = 11
# you can directly use it without initializing it again.
s.score(name,score,grade)
2。
如果你在grades.py中有一个叫做test()
的函数,你可以这样导入它:
from grades import test
# then invoke it
test()
3。
该变量代表 class 学生的实例。你需要这个实例来调用里面的函数。
- Is there a way to import all from different file or do i need to specify each individual class?
答案是肯定的,因为 python import
语句使用 sys.path
(指定模块搜索路径的字符串列表)您需要添加模块的路径在 sys.path
中,例如,如果你想在不同计算机之间进行交互,你可以将模块放在 public
文件夹中,并将文件夹路径添加到 sys.path
:
import sys
sys.path.append( path to public )
- If i just had a function, is it possible to import it just as a function or can you only import via a class?
你只需要使用 from ... import function_name
.
- Why is it when i call upon a class in general i have to make a variable for it as in the example below?
对于这个问题你只需要阅读 python Class objects
文档 :
Class objects support two kinds of operations: attribute references and instantiation.
首先,您可以使用 from module import *
导入所有内容,例如:
hello.py:
def hello():
print 'hello'
def bye():
print 'Bye'
main.py:
from hello import *
hello()
bye()
但这不是一个好办法,如果你有两个文件,两个函数同名,
所以使用
from hello import hello, bye
hello()
bye()
更好,它是函数的一个例子,和class一样。
Third before Second,student是一个class,所以你必须使用一个实例对象来使用带有self参数的函数。如果要使用student.function,函数必须是像这样的静态方法:
class Person:
def __init__():
pass
@staticmethod
def Count():
return 1
print Person.Count()
其次,您可以在独立于 class 的 class 文件中导入函数。
对于较大的程序,为了更有条理,我一直在考虑将我的代码分成不同的 .py
文件,并让主文件在需要时调用这些文件。我环顾四周,看到很多关于为 Python 创建目录和 SystemPath
的评论。那些可以在几台计算机之间分发的程序的合理选择是什么?作为测试,我尝试以 assemble 为例:
这是与 main
grades
的 class
class student:
def __init__(self):
self.name = ""
self.score = 0
self.grade = 0
def update(self,name,score,grade):
self.score = score
self.name = name
self.grade = grade
print self.score,self.name,self.grade
s = student()
s.update(name,score,grade)
这是我目前的主要脚本:
from grades import score
import random
name = 'carl'
score = random.randrange(0,100)
grade = 11
s = student()
s.score(name,score,grade)
关于这个方法我一般有一些问题:
- 有没有办法从不同的文件导入所有文件,或者我是否需要指定每个文件 class?
- 如果我只有一个函数,是否可以将其作为函数导入,或者只能通过 class 导入?
- 为什么当我调用一个 class 时,通常我必须为它创建一个变量,如下例所示?
# way that works
s = student()
s.update(name,score,grade)
# incorrect way
student.update(name,score,grade)
感谢您花时间思考我的问题。
1: Is there a way to import all from different file or do i need to specify each individual class?
您可以使用 "wildcard import",但您可能不应该使用。看 Should wildcard import be avoided?
- If i just had a function, is it possible to import it just as a function or can you only import via a class?
函数可以完全独立于 Python 中的 classes。
3.Why is it when i call upon a class in general i have to make a variable for it as in the example below?
您应该阅读面向对象编程。在基本情况下,您必须实例化 class 的实例才能使用 class 的功能。在您的示例中,class 学生描述了成为学生的意义,而陈述
s = student()
创建一个学生并将其命名为 "s"。 我认为在阅读了一些有关面向对象的编程之后应该清楚这一点。
一般对一个程序的源码进行分割,Python使用模块来分割,对应一个*.py文件。那么对于你的3个问题:
- 你可以通过
import module_name.*
导入整个"module content"(函数,class,全局变量,...)
对于函数,如果是class(成员方法,class方法或静态方法)中的函数,你不仅可以导入函数,还应该import class 使用方法;如果是模块下的函数,可以通过import
module_name.function_name
单独导入函数
update是学生class的成员函数,所以要通过实例来使用。如果是class方法或者静态方法,可以通过你写的class名字来使用
- 是的。
您可以将 student
的实例从其他脚本导入主脚本,如下所示:
from grades import s
# if your first script is called grades.py
import random
name = 'carl'
score = random.randrange(0,100)
grade = 11
# you can directly use it without initializing it again.
s.score(name,score,grade)
2。
如果你在grades.py中有一个叫做test()
的函数,你可以这样导入它:
from grades import test
# then invoke it
test()
3。 该变量代表 class 学生的实例。你需要这个实例来调用里面的函数。
- Is there a way to import all from different file or do i need to specify each individual class?
答案是肯定的,因为 python import
语句使用 sys.path
(指定模块搜索路径的字符串列表)您需要添加模块的路径在 sys.path
中,例如,如果你想在不同计算机之间进行交互,你可以将模块放在 public
文件夹中,并将文件夹路径添加到 sys.path
:
import sys
sys.path.append( path to public )
- If i just had a function, is it possible to import it just as a function or can you only import via a class?
你只需要使用 from ... import function_name
.
- Why is it when i call upon a class in general i have to make a variable for it as in the example below?
对于这个问题你只需要阅读 python Class objects
文档 :
Class objects support two kinds of operations: attribute references and instantiation.
首先,您可以使用 from module import *
导入所有内容,例如:
hello.py:
def hello():
print 'hello'
def bye():
print 'Bye'
main.py:
from hello import *
hello()
bye()
但这不是一个好办法,如果你有两个文件,两个函数同名, 所以使用
from hello import hello, bye
hello()
bye()
更好,它是函数的一个例子,和class一样。
Third before Second,student是一个class,所以你必须使用一个实例对象来使用带有self参数的函数。如果要使用student.function,函数必须是像这样的静态方法:
class Person:
def __init__():
pass
@staticmethod
def Count():
return 1
print Person.Count()
其次,您可以在独立于 class 的 class 文件中导入函数。