我有两个文件,都在同一个项目中(Web抓取框架的一部分)。 File1处理由File2生成的项目。在File2中,我有一个函数可以打印出有关进程的一些基本统计信息(生成了多少项的计数等)。我在File1中有计数,我想用File1的统计数据打印但不确定如何做到这一点。看一下示例代码。
文件1:
class Class1(object):
def __init__(self):
self.stats = counter("name") #This is the instance that I'd like to use in File2
self.stats.count = 10
class counter:
def __init__(self, name):
self.name = name
self.count = 0
def __string__(self):
message = self.name + self.count
return message
文件2 :(这是我想做的)
from project import file1 # this import returns no error
def stats():
print file1.Class1.stats # This is where I'm trying to get the instance created in Class1 of File2.
#print file1.Class1.stats.count # Furthermore, it would be nice if this worked too.
ERROR:
exceptions.AttributeError: type object 'Class1' has no attribute 'stats'
我知道两个文件都在运行,因此'counter'类的'stats'实例也是如此,因为在运行项目时打印出其他方法(这只是一个简单的例子。我在做什么这里错了吗?这可能吗?
答案 0 :(得分:6)
这不起作用,因为您从未实例化Class1
。
__init__
时会调用 Class1
,因此设置了Class1.stats
。
这里有2个选项。
Class1
。Class1
中声明一个返回count属性的静态方法。答案 1 :(得分:2)
在File1中,创建Class1的实例,并使用它来获取计数。
class Class1(object):
def __init__(self):
self.stats = counter()
self.stats.count = 10
class counter:
def __init__(self, name):
self.name = name
self.count = 0
def __string__(self):
message = self.name + self.count
return message
class_instance = Class1()
在file2中,使用创建的实例:
from project import file1
def stats():
print file1.class_instance.stats
答案 2 :(得分:2)
你的术语有点混乱。 “这两个文件都在运行,因此”计数器“类的'stats'实例” - stats
也是{{>对象的属性{{1} 1}}类。如果你想要计算创建了多少个类的实例,你应该使用类属性,它是绑定到你的类的东西,而不是它的实例。
counter
那么这可以像这样使用,
class Counter(object):
count = 0
def __init__(self, name):
self.name = name
Counter.count += 1
self.id = Counter.count
def __repr__(self):
return '<Counter: %s (%d of %d)>' % (
self.name, self.id, Counter.count)
请注意,您>>> foo = Counter('Foo')
>>> print foo
<Counter: Foo (1 of 1)>
>>> bar = Counter('Bar')
>>> print bar
<Counter: Bar (2 of 2)>
>>> print foo
<Counter: Foo (1 of 2)>
>>>
第二次更新了计数,但print foo
保持不变,这是因为id
是一个类属性,但是count
是对象的属性,因此(使用此代码)id
的创建不会影响bar
的{{1}},但会增加id
。