我一直在努力理解類和麪向對象。我看過here和here,但我認爲我的問題更基本。我的理解是,在程序代碼中,最好將變量傳遞給函數,並將其添加到本地名稱空間,而不是訪問全局變量(應該明確聲明)。但是我看到很多引用,其中類方法直接引用實例屬性。例如:Python - 應該將類屬性作爲局部變量傳遞給類方法嗎?
#procedural approach with local namespace
a = 5
def my_local_func(a):
return a + 1
#procedural approach with global variable
a = 5
def my_global_func():
global a
return a + 1
#but it doesn't seem necessary in examples about classes
class MyClass(object):
def __init__(self):
self.a = 5
def dosomething(self):
return self.a + 1
在我看來,這個類的命名空間就是全局命名空間的一個子集,所以它不是很清楚,我爲什麼規則或在這種情況下,至少慣例的變化。我真正關心的是使用通過實例的屬性創建通過屬性裝飾更復雜的實例屬性:
class MyClass(object):
def __init__(self)
self.a = 5
self.b = 1
@property
def c(self):
return self.a + self.b
@c.setter
def c(self, value):
self.b = value
return self.a + self.b
其實,現在我想想,我傳遞的整個自我對象的方法。因此,在那種情況下,對象將被複制到方法(本地)名稱空間中,就像它的屬性一樣,它恰好與實例名稱空間中的屬性具有相同的名稱。我會很感激反饋,讓我知道如果我正在考慮這個問題....我不能是唯一一個想知道這件事的人。
沒有什麼只是「發生」具有相同的名稱:這是'self'通過的全部原因。但我不確定你在問什麼。 (也''自己'不復制,它通過引用傳遞) –
@David:謝謝。這很有幫助。在我一直在努力的書中,基本上只是說,不要忘記在類方法中添加自己作爲必需的參數,而沒有真正談論爲什麼。所以我認爲類方法指向實例名稱空間中的引用,而不是引用方法局部名稱空間。這爲我清除它。 –