python文件调用另一个python class文件中的方法

http://techtrace.org/?p=1347
http://blog.chinaunix.net/uid-29089809-id-4044667.html

同一文件夹情况下
import a
Python 会自动从 sys.path 路径列表里的所有路径里寻找你要 import 的模块,这个路径列表可以通过在终端里输入以下命令查看: 

import sys sys.path

如果要调用其他路径的文件,可以先在上述列表中加入新的路径,以你提到的情况为例: 

import sys sys.path.insert(0, ‘/’) import test

一般一个项目的所有文件应该在同一个项目文件夹中吧,此时有其他解决办法比如在项目的下级目录里放置 
__init__.py
 文件,然后用 
from 文件夹 import 文件名
 的方式来引入模块。

 
============================
如果你的调用文件离被调用的test.py远到八竿子打不着, 可以在sys.path中append "C:/"路径 (使得import过程中的PYATHONPATH能找到test.py这个文件), 再import test. 
或者还有一个方法, 用imp模块的load_source或者find_module+load_module方法动态加载模块, 具体看这http://docs.python.org/library/imp.html =================================
a.funcA()

不同文件夹的话要

import sys
sys.path.insert('a.py所在的路径')
import a

a.funcA()
大概是这样
==============================
win下面cmd当前目录上运行python交互的时候, 
当前目录如果是个python包,要在当前交互引入它, 
也需要 sys.path.append(".."), 
不过我个人的做法通常是sys.path.insert(0,"..") 
 
c:/py25>cd sub 
c:/py25>python 
>>>#import sub #这里提示找不到 
>>>import sys 
>>>sys.path.insert(0,'..') #或者sys.path.append("..") 
>>>import sub #这里引入成功 

 

貌似是大蛇的当前目录是"能识儿子是儿子不识自己是父亲"的, 
也就是要引入当前包的父包的话,要sys.path.insert(0,'../..')了...


=====================================

在Python 中引用是非常简单的事情,这里需要清楚三个概念就可以了包、模块、类。类这个就不用说了。

模块对应的是一个.py 文件,那么module_name 就是这个文件去掉.py 之后的文件名,py 文件中可以直接定义一些变量、函数、类。

那么包我们可以看作一个包含__init__.py 和一系列.py 文件的文件夹,这样做的目的是为了区别包和普通字符串。

import module_name

from package_name import module_name

from package_name import *

那么如何import 时,python 解释器如何才能找到该模块放置的文件位置呢?python 寻找模块的优先级如下:

1、   当前文件目录

2、   环境变量PYTHONPATH

3、   sys.path(list 类型)

sys.path 是list 类型,我们可以通过insert(), append() 方法来增加模块导入的搜索路径,如:

import sys

path = “……” # 需要增加的路径

sys.path.insert(0, path)

在import模块时,该模块的顶层代码将会被执行一次。如果该模块被import多次,例如import A, import B.其中B模块本身也有import A,那么只在第一次被import的时候顶层代码会被执行。

模块能像包含函数定义一样,可包含一些可执行语句。这些可执行语句通常用来进行模块的初始化工作。这些语句只在模块第一次被导入时被执行。这非常重要,有些人以为这些语句会多次导入多次执行,其实不然。

模块在被导入执行时,python解释器为加快程序的启动速度,会在与模块文件同一目录下生成.pyc文件。我们知道python是解释性的脚本语言,而.pyc是经过编译后的字节码,这一工作会自动完成,而无需程序员手动执行。

什么时候你应该使用 from module import

  • 如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用 from module import。
  • 如果你想要有选择地导入某些属性和方法,而不想要其它的,使用 from module import。
  • 如果模块包含的属性和方法与你的某个模块同名,你必须使用 import module 来避免名字冲突。

除了这些情况,剩下的只是风格问题了,你会看到用两种方式编写的 Python 代码。

《python文件调用另一个python class文件中的方法》
尽量少用 from module import * ,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。

其它要点:

在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。

那么我们平常新建文件的时候,都是建一个.py文件(类似java,但是python不用建立类,是以模块为载体)至于怎样组织包就要功能需要了

在C/C++/Java中,main是程序执行的起点,Python中,也有类似的运行机制,但方式却截然不同:Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。

 

每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。这个特性,为测试驱动开发提供了极好的支持,我们可以在每个模块中写上测试代码,这些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起。

典型的Python文件结构:

《python文件调用另一个python class文件中的方法》

python import模块方法

python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构: `-- src     |-- mod1.py     `-- test1.py     若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *; (2)主程序所在目录是模块所在目录的父(或祖辈)目录 如下面程序结构: `-- src     |-- mod1.py     |-- mod2     |   `-- mod2.py     `-- test1.py     若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2. (3)主程序导入上层目录中模块或其他目录(平级)下的模块 如下面程序结构: `-- src     |-- mod1.py     |-- mod2     |   `-- mod2.py     |-- sub     |   `-- test2.py     `-- test1.py     若在程序test2.py中导入模块mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下:    下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py 而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。    import sys    sys.path.append("..")    import mod1    import mod2.mod2  (4)从(3)可以看出,导入模块关键是能够根据sys.path环境变量的值,找到具体模块的路径。这里仅介绍上面三种简单情况。

========================================================================================
文件1:myclass.py


class test1
(
):

    
def 
__init__
(
self
, networkDataset 
= 
'E:\\GPS\\beijingroad'
,

                       workspace 
= 
'Road_ND.nd'
,

                       outFolder 
= 
"out"
,

                       points_table 
= 
"vertex"
):

        
print 
"initialize..."

    
def Foo
(
self
):

        
return 
"a" 文件2:test2.py
</pre
>

def 
test
(
):

import 
os

from myclass 
import test1

c
=test1
(
)

return c.
Foo
(
)

print 
test
(
)

<pre
>

    原文作者:superxgl
    原文地址: https://blog.csdn.net/superxgl/article/details/24850305
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞