我正在尝试实现模块中包含的配置系统。核心配置变量是此模块中的类实例和全局变量。似乎当我导入这个变量时,由于某种原因我不能将它用作类。
考虑这个最小的例子:
class FooClass:
number = 5
def bar (self):
return self.number
foo = FooClass
foo.number = 5
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
参数。我在这里做错了什么?
答案 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