2010-10-15 56 views
7

我最近正在研究一個小小的python項目,並且遇到了我想將self傳遞給另一個對象的構造函數的情況。我不知道爲什麼,但我不得不查看這是否合法在python中。我在C++和Java中做了很多次,但我不記得曾經用python做過這些事情。把自己傳入python的構造函數中

正在將對self的引用傳遞給新對象不被考慮的東西pythonic?我不認爲我見過任何顯式傳遞自引用的python程序。到目前爲止,我是不是有需要?或者我是在fighting py Python風格?

+0

嗯,幾件事情是unpythonic *本身*,它只是有*通常*更好的方法(無論是在設計還是實施水平)。您的問題沒有提出問題,因此我們無法判斷您的解決方案是否有用。 – delnan 2010-10-15 20:38:58

+0

現在我想到了,我必須同意,這在Python中沒有像在例如Java的。不知道爲什麼。 – 2010-10-15 20:39:36

+0

我不知道爲什麼人們堅持要說「pythonic」時,他們只是表示「乾淨」,但這並不存在固有的錯誤。只要注意循環引用和'__del__'。 – 2010-10-15 21:07:22

回答

12

是的,它是合法的,是的它是pythonic。

我發現自己使用這種模式,當你有一個對象和容器對象,其中包含的對象需要知道他們的父母。

+0

是的,我明白你爲什麼需要這樣做,但我只是不確定爲什麼我沒有看到它在Python中做得非常好。 – Falmarri 2010-10-15 20:40:47

+1

可能是因爲python有一個邪惡的多態容器類型集合,它通常足以滿足您的所有需求? – 2010-10-15 20:44:56

+0

適配器模式可以被認爲是其中一種用法,我的意思是如果我們不考慮將參數作爲* self *傳遞給另一個必須包含的對象實例。 – Ashish 2010-10-15 21:14:45

1

只要通過它就像一個參數。當然,它不會被稱爲在其他初始化self ...

class A: 
    def __init__(self, num, target): 
     self.num = num 
     self.target = target 

class B: 
    def __init__(self, num): 
     self.a = A(num, self) 

a = A(1) 
b = B(2) 
print b.a.num # prints 2 
+0

我想這或多或少會問_pythonic_,而不是如何。 – alternative 2010-10-15 20:48:00