所以我用python作为函数语言已经有一段时间了,但我现在正在尝试做“正确的”事情并使用类。。。摔倒了。我正在尝试编写一个classmethod,它可以实例化类的多个成员(用例是从SQLAlchemy加载行)。我只希望能够调用classmethod并让它返回一个状态码(成功/失败),而不是返回一个对象列表。然后,为了访问对象,我将遍历类。到目前为止,我的代码是这样的(当我使用classmethod时,它无法迭代,当我使用普通构造函数时,它工作得很好。)我是不是太离谱了?“Python式”的方法是什么?感谢您的帮助。你知道吗
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)
函数式语言有一定的优势,在探索过程式风格的过程中,您走得太远了。全局变量和类变量有各自的位置,但是如果您需要启动两个SQAlchemy查询并并行使用结果,会发生什么呢?第二个查询将遍历第一个查询仍然需要的类属性。使用对象属性(实例属性)可以解决问题,因为每个结果都包含自己的句柄。你知道吗
如果您关心的是避免预取结果数组,那么您是幸运的,因为Python提供了完美的解决方案:Generators,它基本上是懒惰函数。它们在Python中集成得非常好,我敢打赌您不知道在编写的每个for循环中都使用了它们。你知道吗
用你自己的话说-是的,你疯了:)
状态代码是C语言的一部分,而不是像Python那样具有适当异常语义的语言。修改全局状态肯定会导致灾难。所以-别这么做。返回对象列表。如果发生了灾难性的事情,抛出一个异常;如果恰好没有对象,则返回一个空列表。这允许客户机代码
不用在使用前仔细检查。你知道吗
相关问题 更多 >
编程相关推荐