gpt4 book ai didi

python - 是否可以通过单个类方法调用来实例化一个类的多个实例?

转载 作者:行者123 更新时间:2023-12-01 08:44:46 29 4
gpt4 key购买 nike

所以我使用 python 作为函数式语言已经有一段时间了,但我试图“正确”地做事,现在使用类......但失败了。我正在尝试编写一个可以实例化该类的多个成员的类方法(用例是从 SQLAlchemy 加载行。)我希望能够调用该类方法并让它返回一个状态代码(成功/失败)而不是返回对象列表。然后为了访问对象,我将遍历该类。到目前为止,这是我的代码(当我使用类方法时无法迭代,当我使用普通构造函数时工作正常。)我在这里离谱/疯狂吗?执行此操作的“Pythonic”方法是什么?如有任何帮助,我们将不胜感激,谢谢。

class KeepRefs(object):
__refs__ = defaultdict(list)
def __init__(self):
self.__refs__[self.__class__].append(weakref.ref(self))

@classmethod
def get_instances(cls):
for inst_ref in cls.__refs__[cls]:
inst = inst_ref()
if inst is not None:
yield inst

class Credentials(KeepRefs):

def __init__(self,name, username, password):
super(Credentials, self).__init__()
self.name=name
self.username=username
self.password=password

@classmethod
def loadcreds(cls):
Credentials('customer1','bob','password')
return True


success = Credentials.loadcreds()
for i in Credentials.get_instances():
print (i.name)

最佳答案

用你自己的话来说 - 是的,你离谱而且疯狂:)

状态代码是 C 语言的东西,而不是像 Python 那样具有适当异常语义的语言。修改全局状态肯定会导致灾难。所以 - 不要这样做。返回对象列表。如果发生灾难性的事情,则抛出异常;如果碰巧没有对象,则返回一个空列表。这允许客户端代码执行

for item in Thingies.load_thingies():
... # this won't do anything if load_thingies gave us an empty list

无需在使用前仔细检查某些内容。

关于python - 是否可以通过单个类方法调用来实例化一个类的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53354146/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com