分配变量时将变量名称分配给对象

在python中,变量有名字而对象没有(因为多个变量可以指向同一个对象)


但是有没有办法在将name对象分配给变量时添加/修改对象的属性。


理想情况下,可以这样工作:


spam = MagicObject()

print(spam.name) # output: "spam"

ham = spam

print(spam.name) # output: "ham"

编辑:事实上,我真的不介意第二次打印是“火腿”还是“垃圾邮件”,因为我真的不打算在同一个对象上放置多个变量。我只希望对象在任何情况下都有一个名称。


我的想法是尽可能少写一些参数文件。所以这个简单的代码:


person_id = PrimaryKey()

将创建一个 PrimaryKey 对象并自动将其命名为“person_id”


明月笑刀无情
浏览 146回答 2
2回答

慕丝7291255

我认为这最接近你想要做的事情。这是效率低,滥用globals和properties。此外,如果MagicObject它很复杂,则需要实施__eq__(并且可能__hash__也是如此)。这是一个hack,可能不应该在生产中使用。&nbsp;class MagicObject:&nbsp; &nbsp; @property&nbsp; &nbsp; def name(self):&nbsp; &nbsp; &nbsp; &nbsp; return [k for k, v in globals().items() if v == self]a = MagicObject()print(a.name)b = aprint(a.name)c = aprint(a.name)del bprint(a.name)输出['a']['a', 'b']['a', 'b', 'c']['a', 'c']还要记住,在 Python < 3.7 中,列表的顺序是任意的,因为字典没有顺序。

杨__羊羊

看起来你想写一个 ORM。两个建议:别。例如,使用一个已经编写好的 SQLAlchemy。如果您正在做其他事情,或者您真的想进入那个兔子洞,请检查这些 ORM 是如何做到的,最有可能是使用 MetaClass。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python