我想要创建一种实用工具类,它只包含可以通过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
现在我的“主要”方法:
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)
...
这里有几个问题:
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
你得到错误是因为你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程序员的想法。
不应该在Python中创建静态方法。应该做的是将它们放在全局函数级别,然后在调用它们时访问它们所在的模块。
foo.py:
def bar():
return 42
Baz.py:
import foo
print foo.bar()