首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python类静态方法

Python类静态方法
EN

Stack Overflow用户
提问于 2012-10-05 04:31:00
回答 7查看 70.6K关注 0票数 58

我想创建一种实用类,它只包含可通过name类前缀调用的静态方法。看起来我做错了什么:)

这是我的小班:

代码语言:javascript
复制
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“方法:

代码语言:javascript
复制
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在这里有几个问题:

  1. ,我做错了什么?静态方法不应该被类名调用吗?Python中是否真的需要一个实用程序类,或者是否有其他方法可以实现同样的目的?如果我尝试更改main中的代码,我会得到:TypeError: GetFilePath() takes exactly 1 argument (2 given)

新的main

代码语言:javascript
复制
from FileUtility import *
def main():
    objFile = FileUtility()
    path = 'H:\config_file_list.txt'
    dir = objFile.GetFilePath(path)
    print dir
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-10-05 04:35:14

你得到这个错误是因为你在每个函数中都有一个self参数。它们是静态的,你不需要它。

然而,做到这一点的“pythonic”方法不是拥有一个充满静态方法的类,而只是让它们成为模块中的自由函数。

代码语言:javascript
复制
#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上)

代码语言:javascript
复制
import fileutility

fileutility.get_file_size("myfile.txt")
fileutility.get_file_path("that.txt")

它没有特别提到静态方法,但如果您来自另一种语言PEP 8,python风格指南是了解python程序员如何思考的很好的读物和介绍。

票数 90
EN

Stack Overflow用户

发布于 2012-10-05 04:34:40

你真的不应该在Python中创建静态方法。您应该做的是将它们放在全局函数级别,然后在调用它们时访问它们所在的模块。

foo.py:

代码语言:javascript
复制
def bar():
  return 42

baz.py:

代码语言:javascript
复制
import foo
print foo.bar()
票数 8
EN

Stack Overflow用户

发布于 2012-10-05 04:35:57

静态方法不会将对象作为第一个参数传入(无对象)

删除self参数,调用就可以正常工作了。导入问题也是相关的。静态注释也是相关的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12735392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档