在python中,变量有名字而对象没有(因为多个变量可以指向同一个对象)但是有没有办法在将name对象分配给变量时添加/修改对象的属性。理想情况下,可以这样工作:spam = MagicObject()print(spam.name) # output: "spam"ham = spamprint(spam.name) # output: "ham"编辑:事实上,我真的不介意第二次打印是“火腿”还是“垃圾邮件”,因为我真的不打算在同一个对象上放置多个变量。我只希望对象在任何情况下都有一个名称。我的想法是尽可能少写一些参数文件。所以这个简单的代码:person_id = PrimaryKey()将创建一个 PrimaryKey 对象并自动将其命名为“person_id”
2 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
我认为这最接近你想要做的事情。这是效率低,滥用globals和properties。此外,如果MagicObject它很复杂,则需要实施__eq__(并且可能__hash__也是如此)。
这是一个hack,可能不应该在生产中使用。
class MagicObject:
@property
def name(self):
return [k for k, v in globals().items() if v == self]
a = MagicObject()
print(a.name)
b = a
print(a.name)
c = a
print(a.name)
del b
print(a.name)
输出
['a']
['a', 'b']
['a', 'b', 'c']
['a', 'c']
还要记住,在 Python < 3.7 中,列表的顺序是任意的,因为字典没有顺序。
杨__羊羊
TA贡献1943条经验 获得超7个赞
看起来你想写一个 ORM。两个建议:
别。例如,使用一个已经编写好的 SQLAlchemy。
如果您正在做其他事情,或者您真的想进入那个兔子洞,请检查这些 ORM 是如何做到的,最有可能是使用 MetaClass。
添加回答
举报
0/150
提交
取消