我在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'。两个文件夹都在同一级别。导入类文件或使用静态方法声明本身的方式有问题吗?
答案 0 :(得分:9)
Python不是Java。
首先,Tester或Password类绝对没有意义。如果您没有存储状态,则不要定义类。将whatever
和generateChars
同为正常的独立函数。
但是,假设您这样做只是为了了解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中,函数不会将作为类定义的一部分。