2 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個贊
我認(rèn)為這最接近你想要做的事情。這是效率低,濫用globals和properties。此外,如果MagicObject它很復(fù)雜,則需要實(shí)施__eq__(并且可能__hash__也是如此)。
這是一個hack,可能不應(yīng)該在生產(chǎn)中使用。
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 中,列表的順序是任意的,因?yàn)樽值錄]有順序。

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊
看起來你想寫一個 ORM。兩個建議:
別。例如,使用一個已經(jīng)編寫好的 SQLAlchemy。
如果您正在做其他事情,或者您真的想進(jìn)入那個兔子洞,請檢查這些 ORM 是如何做到的,最有可能是使用 MetaClass。
添加回答
舉報