【发布时间】:2022-01-30 15:09:03
【问题描述】:
我想获取为一个类创建的所有实例。 有什么方法可以在不导入任何模块的情况下获取实例?
我尝试用这种方式将 self 附加到类属性中。
class A(object):
instances = []
def __init__(self, foo):
self.foo = foo
A.instances.append(self)
foo = A("hi")
bar = A("Hey")
star = A("Hero")
for instance in A.instances:
print("Ins is ",instance)
输出
<__main__.A object at 0x148b8b6e0780>,
<__main__.A object at 0x148b8b6e0780>,
<__main__.A object at 0x148b8b6e0780>
我希望它打印 foo,bar,star。 有没有什么方法可以在没有任何模块的情况下在课堂上获得它?
【问题讨论】:
-
假设你做了
baz = foo。你希望它打印什么? -
zyou 正在打印该类的实例。 “我希望它打印 foo,bar,star。” 为什么你会这样认为?如果我先
x = 1然后print(x),它会在屏幕上打印x或1吗? -
一般来说,你应该明确地提供一个对象应该知道的数据,通常作为构造函数的参数(一个花哨的名字是依赖注入) .如果你想让一个对象知道
"foo",那么传入那个字符串。然后,您可以通过实现__repr__和/或__str__来修改该类型的默认打印行为。 -
另请注意,您可以创建实例而无需将它们绑定到名称,例如在列表理解中。您的对象不应该关心它绑定到的名称。相反表明可能存在设计问题。
-
如果你想依赖变量名,你必须经历各种类似this library 中看到的hijink(注意,如果你想了解python 内部结构,这是一本很好的读物,并且你会怎么做)。但真的,真的,你应该简单地keep data out of variable names。总而言之,虽然这是一个有趣的练习,看看如何做到这一点,你通常不应该围绕这个来设计你的代码
标签: python class oop attributes instance