python class中遇到的TypeError: 'module' object is not callable
发布日期:2021-06-24 07:06:57 浏览次数:4 分类:技术文章

本文共 2258 字,大约阅读时间需要 7 分钟。

写的类模块放在BookEntry.py中,源码为:

#!/usr/bin/env python#encoding=utf8class  BookEntry(object):	def  __init__(self,nm,ph):		self.name=nm		self.phone=ph				print "Created a bookentry class"		def updatePhone(self,newph):		self.phone=newph				print "updated new phone for",self.name		def printInfo(self):		print '='*20		print "Name=",self.name		print "Phone=",self.phone

 调用的方式为:

guosong@guosong-Rev-1-0:~/opdir/python$ pythonPython 2.7.3 (default, Aug  1 2012, 05:16:07) [GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import BookEntry>>> >>> callable(BookEntry)False

 callable函数返回值为False

查找网上资料说必须按照如下写:

Python 2.7.3 (default, Aug  1 2012, 05:16:07) [GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> from BookEntry import *>>> >>> callable(BookEntry)True

 原因为:import BookEntry方式是将BookEntry作为一个函数进行调用,但是它不是一个函数,是模块;后者则将其作为一个函数进行引入,故可以被调用

 

插曲:将BookEntry.py的文件名写成Bookentry.py,导致进行callable(BookEntry)老是出错,返回结果为False。

 

有关modules的介绍

模块的含义就是包含python定义语句的文件,文件名为模块名加上.py后缀。

例子:

fibo.py文件为

 

# Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to n    a, b = 0, 1    while b < n:        print b,        a, b = b, a+bdef fib2(n): # return Fibonacci series up to n    result = []    a, b = 0, 1    while b < n:        result.append(b)        a, b = b, a+b    return result

 

 在IDE中调用:

 

 

>>> import fibo>>> >>> help(fibo)>>> fib(10)Traceback (most recent call last):  File "
", line 1, in
NameError: name 'fib' is not defined>>> fibo.fib(10)1 1 2 3 5 8>>> fibo.__name__'fibo'

 

调用的时候必须加上模块名,否则找不到该函数出错。如果觉得总是加上模块名称比较麻烦的话,可以设置别名调用方式,如下测试例子:

>>> import fibo>>> >>> fib=fibo.fib>>> fib(10)1 1 2 3 5 8

 以spam模块路径的搜索方式:

1、先搜索内置模块(built-in module),如果没有找到转向2;

2、查找目录下是否存在spam.py文件

包括如下目录:

1、当前目录

3、安装时候设置的初始值(the installation-dependent default)

已编译 的python文件

类似spam.pyc这样的文件

正常情况下,spam.pyc是自动生成的,当spam.py编译成功后,会向spam.pyc写入版本信息,且该文件与平台独立的。

 

 

使用sys.path方案:

主函数[root@typhoeus79 20130918]# more main.py #!/usr/bin/env pythonimport osimport syssys.path.append("./lib")from func import *test()

对应的lib文件:

[root@typhoeus79 20130918]# more ./lib/func.py#!/usr/bin/env pythondef test():        print 'a'

 

转载于:https://www.cnblogs.com/gsblog/archive/2013/06/06/3122822.html

转载地址:https://blog.csdn.net/weixin_30896763/article/details/99481700 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JavaScript事件
下一篇:3、DNS服务器功能(正向、反向解析)

发表评论

最新留言

很好
[***.229.124.182]2024年04月18日 09时09分37秒