分配变量后,将变量名称分配给对象

时间:2019-03-27 09:19:59

标签: python

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

但是有一种方法可以在将对象的ubuntu@donald0:~$ pip list DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning. ... cryptography (2.1.4) docker (3.7.1) docker-pycreds (0.4.0) ... 属性分配给变量后对其进行添加/修改。

理想情况下,类似这样的事情:

name

编辑:实际上,我并不介意第二次打印是“火腿”还是“垃圾邮件”,因为我实际上并不打算在同一对象上有多个变量指向。无论情况如何,我只希望该对象具有名称。

我的想法是创建一种尽可能少写的参数文件。这样的简单代码:

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

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

2 个答案:

答案 0 :(得分:3)

我认为这是您所能达到的最接近的目标。它效率低下并且滥用globalsproperties。另外,如果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中,列表的顺序是任意的,因为字典没有顺序。

答案 1 :(得分:0)

好像您要编写一个ORM。两个建议:

  • 不要。例如,使用已经编写的SQLAlchemy。
  • 如果您正在做其他事情,或者您真的想钻进那个兔子洞,请检查那些ORM的工作方式,很可能是使用MetaClass。