为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2021-12-17 16:36:57
在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 中,列表的顺序是任意的,因为字典没有顺序。


查看完整回答
反对 回复 2021-12-17
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

看起来你想写一个 ORM。两个建议:

  • 别。例如,使用一个已经编写好的 SQLAlchemy。

  • 如果您正在做其他事情,或者您真的想进入那个兔子洞,请检查这些 ORM 是如何做到的,最有可能是使用 MetaClass。


查看完整回答
反对 回复 2021-12-17
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信