正确使用静态方法

时间:2012-11-03 17:16:17

标签: python static-methods

我在Password.py中跟随了名为folder1的简化类:

import random                                                                    

CHARS = "ABC"

class PasswordHelper(object):                                                  
    @staticmethod                                                                          
    def generateChars(length):                                                    
       return ''.join(random.choice(CHARS) for x in range(length))

现在我在TestClass.py中有另一个课程folder2

sys.path.append('../folder1/')                              
import Password                                         

class Tester:                                           
    def whatever(self):                                   
        print Password.generateChars(3)

def main():
     x = Tester()
     x.whatever()

# call main method
main()

调用python TestClass.py时出现以下错误:AttributeError:'module'对象没有属性'generateChars'。两个文件夹都在同一级别。导入类文件或使用静态方法声明本身的方式有问题吗?

2 个答案:

答案 0 :(得分:9)

Python不是Java。

首先,Tester或Password类绝对没有意义。如果您没有存储状态,则不要定义类。将whatevergenerateChars同为正常的独立函数。

但是,假设您这样做只是为了了解Python类,您还没有理解类不等于Python中的模块。由于您已导入Password模块,因此仍需要参考PasswordHelper类:

Password.PasswordHelper.generateChars(3)

或者,您可以导入PasswordHelper类:

from Password import PasswordHelper
...
PasswordHelper.generateChars(3)

最后,请按照PEP8了解您的模块,类和函数名称。

答案 1 :(得分:2)

您在类中定义了该函数,因此您还需要使用类名引用它:

print Password.PasswordHelper.generateChars(3)

或者,移动类定义的函数 out ,此时您根本不需要使用@staticmethod

import random                                                                    

CHARS = "ABC"

def generateChars(length):                                                    
    return ''.join(random.choice(CHARS) for x in range(length))

在Python中,函数不会作为类定义的一部分。