Python 导入类类型全局变量

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

我试图实现一个包含在模块中的配置系统。核心配置变量是该模块中的类实例和全局变量。似乎当我导入这个变量时,出于某种原因,我不能将它用作类

考虑这个最小的例子:

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() 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