回答
這是不可能的內__init__
直接因雞和蛋的問題。但是,這可以在一個任務聲明中:
>>> class A:
... pass
...
>>> class B:
... pass
...
>>> a, b = b.a, a.b = A(), B()
>>> a.b is b
True
>>> b.a is a
True
這取決於Python從左向右評估賦值的事實。
它是not thread safe;如果您需要確保引用存在於線程應用程序中,那麼您將需要使用互斥鎖來處理可能的競爭條件。 GIL在操作碼級別工作,這是比Python代碼行更精細的分辨率。
它也沒有同時傳遞給兩個構造函數的引用,這當然是不可能的。 –
@JoshLee把頭髮分解成荒謬的程度。即使是原子操作也不能同時做兩件事情。 –
@AdamSmith只是爲了澄清。問的具體問題是不可能的,但有各種創造性的方式來回答它。 –
你可以做到這一點在__init__
如果你做出類初始化的一個採取其他類的一個對象:
>>> class B:
... def __init__(self):
... self.c = C(self)
...
>>> class C:
... def __init__(self, b):
... self.b = b
...
>>> b = B()
>>> c = b.c
>>> b.c
<__main__.C object at 0x107a4f6d8>
>>> b.c.b.c
<__main__.C object at 0x107a4f6d8>
>>> b.c.b.c.b
<__main__.B object at 0x107a60e80>
>>> b
<__main__.B object at 0x107a60e80>
>>> c
<__main__.C object at 0x107a4f6d8>
>>> c.b
<__main__.B object at 0x107a60e80>
>>> b.c
<__main__.C object at 0x107a4f6d8>
>>> b.c.b.c
<__main__.C object at 0x107a4f6d8>
>>> c.b.c.b
<__main__.B object at 0x107a60e80>
甚至不帶任何參數來__init__
:
>>> class B:
... def __init__(self):
... self.c = C()
... self.c.b = self
...
>>> class C:
... pass
...
>>> b = B()
>>> c = b.c
>>> b
<__main__.B object at 0x10835c048>
>>> c
<__main__.C object at 0x1085ccac8>
>>> b.c
<__main__.C object at 0x1085ccac8>
>>> c.b
<__main__.B object at 0x10835c048>
>>> b.c.b.c.b
<__main__.B object at 0x10835c048>
- 1. 兩個python類實例互相引用
- 2. 兩個相互隔離的vertx實例
- 3. 軟件設計 - 兩個類之間的相互作用
- 4. OOP中兩個類之間的相互作用
- 5. R中兩個分類變量之間的相互作用
- 6. 互相引用的不可變實例
- 7. Python中相互引用的實例
- 8. 兩個類別相互參照
- 9. python中的類的實例化之間的區別
- 10. C++:兩個類之間的互連
- 11. iPhone委託並使兩個實例化對象互相對話
- 12. 實例化jsp腳本之間的類
- 13. 兩個例外之間的區別
- 14. 加載類和實例化之間的區別
- 15. Visual C++/CLI兩個類對象之間的相互訪問?
- 16. 兩個類之間的引用
- 17. 如何實現相互引用的類?
- 18. Objective-C子類化:兩個子類實例似乎指向相同的實例
- 19. 類之間的相互作用
- 20. 相互引用的默認類型實例
- 21. 兩個EC2實例之間的ssh
- 22. 兩個SolrCloud實例之間的複製
- 23. 相同指令的兩個實例相互干擾?
- 24. 如何讓兩個telnet實例互相交互?
- 25. Highcharts - 兩個類別之間的線
- 26. 兩個類別之間的優先級
- 27. 兩個類之間的區別__construct()
- 28. 兩個級別相互使用
- 29. 谷歌雲引擎,兩個centos7實例之間的ssh失敗
- 30. 實例化兩個其他對象之間的對象
你這是什麼意思是*精確地* *它聽起來非常直截了當......但是你絕對不應該在Python中使用getter和setter。 –
'a = A(); b = B(); a.b,b.a = b,a' –
好嗎?在C創建之前,我怎樣才能將C的引用傳遞給B. –