如何以编程方式调用 Python 中的 class 成员函数?
How to programmatically call a class member function in Python?
如何以编程方式调用 Python 中的 class 成员函数?
比如我在peewee中有一个class Model
,有各种方法属性,例如.select()
、.join()
、.where()
等。 ..
这是文档中的示例。
query = (User
.select(User.username, fn.COUNT(Favorite.id).alias('count'))
.join(Tweet, JOIN.LEFT_OUTER) # Joins user -> tweet.
.join(Favorite, JOIN.LEFT_OUTER) # Joins tweet -> favorite.
.group_by(User.username))
要连接多个 table,我必须多次调用连接方法。
问题是我希望能够将它称为 n
,其中 n
是 link 的数组,因为我的模型是以编程方式定义的,对于 link s.
所以它可能是这样的:
query = (ModelA
.select(*AllModels)
.join(ModelB, JOIN.LEFT_OUTER, on=cond1)
.join(ModelC, JOIN.LEFT_OUTER, on=cond2)
.join(ModelD, JOIN.LEFT_OUTER, on=cond3)
.join(ModelE, JOIN.LEFT_OUTER, on=cond4)
如何使用循环或等效方法以编程方式应用 join
调用?
为了生成连接列表,我有如下结构
schema = {
"datasets": {
"a74d411f-412b-42b3-aa31-a1f687e0257e": {
"oid": "5e585118de2ecd919a50fd94",
"fullpath": "/vob/CABC/CABC123/ad/a/ae.sas7bdat"
},
"067a21c5-e512-49d7-bd2c-40fbb56e6f30": {
"oid": "5e585118de2ecd919a50fd94",
"fullpath": "/vob/CABC/CABC123/ad/a/dm.sas7bdat"
},
"067a21c5-e512-49d7-bd2c-40fbb56e6f31": {
"oid": "5e585118de2ecd919a50fd94",
"fullpath": "/vob/CABC/CABC123/ad/a/zn.sas7bdat"
}
},
"links": [
{
"dataset_origin": "a74d411f-412b-42b3-aa31-a1f687e0257e",
"column_origin": "SUBJID",
"dataset_target": "067a21c5-e512-49d7-bd2c-40fbb56e6f30",
"column_target": "SUBJID",
"join_type": "INNER"
},
{
"dataset_origin": "a74d411f-412b-42b3-aa31-a1f687e0257e",
"column_origin": "SUBJID",
"dataset_target": "067a21c5-e512-49d7-bd2c-40fbb56e6f31",
"column_target": "SUBJID",
"join_type": "INNER"
}
]
}
在这里您可以使用常规循环进行折叠,例如
query = ModelA.select(*AllModels)
for Model, cond in ...:
query = query.join(Model, JOIN.LEFT_OUTER, on=cond)
除此之外,方法的访问方式与任何其他属性一样,因此您可以 getattr(obj, method_name)(method_params...)
如何以编程方式调用 Python 中的 class 成员函数?
比如我在peewee中有一个class Model
,有各种方法属性,例如.select()
、.join()
、.where()
等。 ..
这是文档中的示例。
query = (User
.select(User.username, fn.COUNT(Favorite.id).alias('count'))
.join(Tweet, JOIN.LEFT_OUTER) # Joins user -> tweet.
.join(Favorite, JOIN.LEFT_OUTER) # Joins tweet -> favorite.
.group_by(User.username))
要连接多个 table,我必须多次调用连接方法。
问题是我希望能够将它称为 n
,其中 n
是 link 的数组,因为我的模型是以编程方式定义的,对于 link s.
所以它可能是这样的:
query = (ModelA
.select(*AllModels)
.join(ModelB, JOIN.LEFT_OUTER, on=cond1)
.join(ModelC, JOIN.LEFT_OUTER, on=cond2)
.join(ModelD, JOIN.LEFT_OUTER, on=cond3)
.join(ModelE, JOIN.LEFT_OUTER, on=cond4)
如何使用循环或等效方法以编程方式应用 join
调用?
为了生成连接列表,我有如下结构
schema = {
"datasets": {
"a74d411f-412b-42b3-aa31-a1f687e0257e": {
"oid": "5e585118de2ecd919a50fd94",
"fullpath": "/vob/CABC/CABC123/ad/a/ae.sas7bdat"
},
"067a21c5-e512-49d7-bd2c-40fbb56e6f30": {
"oid": "5e585118de2ecd919a50fd94",
"fullpath": "/vob/CABC/CABC123/ad/a/dm.sas7bdat"
},
"067a21c5-e512-49d7-bd2c-40fbb56e6f31": {
"oid": "5e585118de2ecd919a50fd94",
"fullpath": "/vob/CABC/CABC123/ad/a/zn.sas7bdat"
}
},
"links": [
{
"dataset_origin": "a74d411f-412b-42b3-aa31-a1f687e0257e",
"column_origin": "SUBJID",
"dataset_target": "067a21c5-e512-49d7-bd2c-40fbb56e6f30",
"column_target": "SUBJID",
"join_type": "INNER"
},
{
"dataset_origin": "a74d411f-412b-42b3-aa31-a1f687e0257e",
"column_origin": "SUBJID",
"dataset_target": "067a21c5-e512-49d7-bd2c-40fbb56e6f31",
"column_target": "SUBJID",
"join_type": "INNER"
}
]
}
在这里您可以使用常规循环进行折叠,例如
query = ModelA.select(*AllModels)
for Model, cond in ...:
query = query.join(Model, JOIN.LEFT_OUTER, on=cond)
除此之外,方法的访问方式与任何其他属性一样,因此您可以 getattr(obj, method_name)(method_params...)