导入类类型全局变量

时间:2014-11-09 16:28:15

标签: python

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

考虑这个最小的例子:

foomodule.py:

class FooClass:
    number = 5

    def bar (self):
        return self.number

foo = FooClass
foo.number = 5

main.py

from foomodule import foo
print foo.bar()

运行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实例调用它,我认为它应该像通常那样是self参数。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

您只将foo绑定到;你没有把它变成一个实例:

foo = FooClass  # only creates an additional reference

打电话给班级:

foo = FooClass()  # creates an instance of FooClass

在Python中,您通常不使用访问器方法;只需在foo.number模块中引用main,而不是使用foo.bar()来获取它。

答案 1 :(得分:0)

在您的示例中,foo只是FooClass的别名。我认为你的实际问题比你的片段更复杂。但是,如果您确实需要类方法,则可以使用@classmethod装饰器对其进行注释。

class FooClass(object):
    number = 5

    @classmethod
    def bar(cls):
        return cls.number

要使用你可以做的课程:

from foomodule import Foo
Foo.bar()

或者您可以直接访问班级成员

Foo.number