2011-04-28 64 views
2

什麼是在init函數中初始化實例變量的最佳方法。兩次使用同一個名字的風格很差嗎?在Python中,避免對__init__參數和實例變量使用相同名稱的最佳方法是什麼?

class Complex: 
    def __init__(self, real, imag): 
     self.real = real 
     self.imag = imag 

它看起來稀鬆我拿出這樣的任意替代名稱:

class Complex: 
    def __init__(self, realpart, imagpart): 
     self.r = realpart 
     self.i = imagpart 

我不認爲這是PEP 8風格指南中解決。它只是說實例變量和方法名應該用小寫字母分隔下劃線。

+3

您認爲哪一個可提高可讀性? – ptomato 2011-04-28 15:49:41

+0

在這個例子中,第二個是最具可讀性的,但在一個更復雜的例子中,具有更多不同種類的參數,這兩個例子似乎都不能很好地工作。 – 2011-04-28 15:50:56

回答

13

這也許是主觀的,但我不認爲它可憐的風格使用同一個名字兩次。由於self在Python中並不隱含,所以self.realreal是完全不同的,並且不會像其他語言(即C++/Java,其中成員的命名參數在某種程度上被忽略)中所體驗的名稱隱藏等的危險那樣。

實際上,賦予參數與成員相同的名稱會給出強烈的語義提示,即參數將逐個映射到成員。

+3

+1:如果兩個名字相同,它簡化了閱讀代碼。 – 2011-04-28 15:57:47

+0

如果你習慣了其他語言的隱式self/this,重複的名字可能看起來不是個好主意,但是由於python *會迫使你使用self,這就好像在你的字段名稱中添加一個前綴一樣可能使用了類似m_Real或_real的東西)。 – 2011-04-28 16:01:31

4

有幾個原因需要更改底層實例變量的名稱,但它將取決於您實際需要做什麼。一個很好的例子是使用屬性。你可以,例如,創建不被覆蓋的變量,這可能意味着你想將它們存儲在其他一些變量,像這樣:

class MyClass: 
    def __init__(self, x, y): 
    self._x, self._y = x, y 

    @property 
    def x(self): 
    return self._x 

    @x.setter 
    def x(self, value): 
    print "X is read only." 

    @property 
    def y(self): 
    return self._y 

    @y.setter 
    def y(self, value): 
    self._y = value 

這將創建一個類,允許你用兩個值實例,x和y,但是當y可以時x不能被改變。

雖然一般來說,重複使用同一個名稱作爲實例變量是清楚而恰當的。

相關問題