我想创建一种实用类,它只包含可通过name类前缀调用的静态方法。看起来我做错了什么:)
这是我的小班:
class FileUtility():
@staticmethod
def GetFileSize(self, fullName):
fileSize = os.path.getsize(fullName)
return fileSize
@staticmethod
def GetFilePath(self, fullName):
filePath = os.path.abspath(fullName)
return filePath
现在我的"main“方法:
from FileUtility import *
def main():
path = 'C:\config_file_list.txt'
dir = FileUtility.GetFilePath(path)
print dir
我得到了一个错误:unbound method GetFilePath() must be called with FileUtility instance as first argument (got str instance instead)
。
A在这里有几个问题:
TypeError: GetFilePath() takes exactly 1 argument (2 given)
:
新的main
from FileUtility import *
def main():
objFile = FileUtility()
path = 'H:\config_file_list.txt'
dir = objFile.GetFilePath(path)
print dir
发布于 2012-10-05 04:35:14
你得到这个错误是因为你在每个函数中都有一个self
参数。它们是静态的,你不需要它。
然而,做到这一点的“pythonic”方法不是拥有一个充满静态方法的类,而只是让它们成为模块中的自由函数。
#fileutility.py:
def get_file_size(fullName):
fileSize = os.path.getsize(fullName)
return fileSize
def get_file_path(fullName):
filePath = os.path.abspath(fullName)
return filePath
现在,在您的其他python文件中(假设fileutility.py在相同的目录中或在PYTHONPATH
上)
import fileutility
fileutility.get_file_size("myfile.txt")
fileutility.get_file_path("that.txt")
它没有特别提到静态方法,但如果您来自另一种语言PEP 8,python风格指南是了解python程序员如何思考的很好的读物和介绍。
发布于 2012-10-05 04:34:40
你真的不应该在Python中创建静态方法。您应该做的是将它们放在全局函数级别,然后在调用它们时访问它们所在的模块。
foo.py:
def bar():
return 42
baz.py:
import foo
print foo.bar()
发布于 2012-10-05 04:35:57
静态方法不会将对象作为第一个参数传入(无对象)
删除self
参数,调用就可以正常工作了。导入问题也是相关的。静态注释也是相关的。
https://stackoverflow.com/questions/12735392
复制相似问题