【发布时间】:2016-11-24 10:17:19
【问题描述】:
我如何在没有“Class”的情况下使用 getattr ?
所以我遇到了这种情况:我有“列”以特定顺序向 mysql 询问特定数据。数据通过flask/apache打印,以便用户能够操作这些数据。现在,从烧瓶,POST methdd,我收到更改(?)值并将它们存储在 python 属性中。我需要检查这些属性中的值是否与原始数据中的值相同。当然,我可以对其进行硬核,但我希望有可能动态更改列。
columns = ["username", "email", "admin"]
data = ("john", "john@snow.com", "True")
username = "john"
email = "different@email.com"
admin = False
不知道该如何处理?
for i in data:
if i == getattr(???, 'username'):
print("it's the same")
或类似的东西?:
for i in data:
if i == getattr(data, '?????'):
print("it's the same")
一切都在烧瓶中,我无法将其嵌入到类本身中。所以我没有“自我”等。 如果我可以创建类,我可能会做类似的东西
class Myclass:
def __init__(self):
self.columns = ["username", "email", "admin"]
self.data = ("john", "john@snow.com", "True")
self.result = []
self.username = "john"
self.email = "different@email.com"
self.admin = False
def test(self):
for i in self.data:
if i == getattr(self, self.columns[self.data.index(i)]):
self.result.append("same")
else:
self.result.append("different")
return self.result
Myclass().test()
['相同','不同','不同']
【问题讨论】:
-
省略
"self." +。该属性称为username,而不是self.username。 -
谢谢!为了清楚起见,我将编辑问题:)
-
如果你能做
x = thing.attribute之类的事情,那么你也可以做attribute_name = "attribute"; x = getattr(thing, attribute_name)之类的事情。 仅此而已。 -
@AlexHall,听起来不错,但“东西”会是什么?
-
字面意思是任何可以获得
thing.attribute的东西。一遍又一遍地阅读评论。我强调最后一句话是有原因的。