Python 导入类类型全局变量
我试图实现一个包含在模块中的配置系统。核心配置变量是该模块中的类实例和全局变量。似乎当我导入这个变量时,出于某种原因,我不能将它用作类 考虑这个最小的例子: foodule.py: main.py 运行main.py会导致一条神秘的错误消息:Python 导入类类型全局变量,python,Python,我试图实现一个包含在模块中的配置系统。核心配置变量是该模块中的类实例和全局变量。似乎当我导入这个变量时,出于某种原因,我不能将它用作类 考虑这个最小的例子: foodule.py: main.py 运行main.py会导致一条神秘的错误消息: Traceback (most recent call last): File "main.py", line 2, in <module> print foo.bar() TypeError: unbound method bar
Traceback (most recent call last):
File "main.py", line 2, in <module>
print foo.bar()
TypeError: unbound method bar() must be called with FooClass instance as first argument (got nothing instead)
但我用一个FooClass实例来调用它,我认为它应该像通常一样是自变量。我做错了什么?你只把福绑在了课堂上;您没有将其作为一个实例:
foo = FooClass # only creates an additional reference
给班级打电话:
foo = FooClass() # creates an instance of FooClass
在Python中,通常不使用访问器方法;只需在主模块中引用foo.number,而不是使用foo.bar来获取它。在您的示例中,foo只是FooClass的别名。我假设您的实际问题比您的代码片段更复杂。但是,如果您确实需要类方法,可以使用@classmethod decorator对其进行注释
class FooClass(object):
number = 5
@classmethod
def bar(cls):
return cls.number
要使用您的课程,您可以执行以下操作:
from foomodule import Foo
Foo.bar()
或者您可以直接访问类成员
Foo.number
那太时髦了。对于局部变量,前者似乎不会引起问题。为什么只有导入的变量会像这样烦恼?另外,foo.bar是一个访问器,因为它是一个示例,我的实际用例比这个更大。@crimsondash:这与导入无关。如果你只导入了类,你仍然需要调用它来创建一个实例。@crimsondash:考虑到python文本创建字符串、整数、列表等。告诉python编译器为你调用类型;foo.number=5告诉Python为您创建int类型的实例。但是没有“文字语法”来创建自定义类的实例。
from foomodule import Foo
Foo.bar()
Foo.number