我不明白這些用於什麼,特別是self
的說法?有人可以向我解釋這一點,爲什麼你想要通過這個?Python中'self'和'__init__'表達式的含義是什麼?
此外,我一直認爲__init__
是'初始化',但它沒有發生在我身上,我從來沒有必須把任何東西放在這裏。有人能給我一個簡單的例子嗎?
編輯:我只是很困惑,每次我看到self
被傳遞到一個函數,或類似的東西。
我不明白這些用於什麼,特別是self
的說法?有人可以向我解釋這一點,爲什麼你想要通過這個?Python中'self'和'__init__'表達式的含義是什麼?
此外,我一直認爲__init__
是'初始化',但它沒有發生在我身上,我從來沒有必須把任何東西放在這裏。有人能給我一個簡單的例子嗎?
編輯:我只是很困惑,每次我看到self
被傳遞到一個函數,或類似的東西。
self
是您調用該方法的對象。這有點像Java中的this
。
__init__
在創建時初始化每個對象時會調用它。它就像Java中的構造函數。
因此,無論何時您想在創建對象時設置對象的任何屬性(Java成員變量),您都可以使用__init__
。如果你對一個「空」對象滿意,你不需要一個__init__
方法,但是如果你想用參數創建一個對象,你需要一個。
一個例子是:
class StackOverflowUser:
def __init__(self, name, userid, rep):
self.name = name
self.userid = userid
self.rep = rep
dave = StackOverflowUser("Dave Webb",3171,500)
然後,我們可以看一下我們創建的對象:
>>> dave.rep
500
>>> dave.name
'Dave Webb'
所以我們可以看到__init__
傳遞的參數,我們一起給了構造函數與self
,這是已創建的對象的引用。當我們處理參數並適當地更新對象時,我們使用self
。
當其他語言不需要它時,爲什麼Python有self
這個問題。根據Python FAQ:
爲什麼必須在方法定義和調用中明確使用'self'?
首先,這是比較明顯的,你正在使用的方法或實例屬性,而不是一個局部變量...
其次,它意味着沒有特殊的語法是必要的,如果你想明確地引用或致電方法從一個特定的類...
最後,例如變量它解決了賦值的語法問題:因爲Python中的局部變量是(根據定義!)在函數體中分配值的那些變量沒有明確地聲明爲全局的),必須有某種方式告訴解釋器,賦值意圖分配給實例變量而不是賦給局部變量,它應該最好是句法(出於效率原因)...
把它看作C++/Java中的「this」參數:它用於引用一個類的實例。
Class Whatever:
def __init__(self, some_parameter):
self.instance_parameter = some_parameter
的__init__
覺得作爲一個類的實例構造。
自我按照慣例是您正在調用方法的對象的實例。
例如:
class MyClass:
"""A simple example class"""
def __init__(self):
print "MyClass class created"
i = 12345
def f(self):
return self.i
# Create an object called a of type MyClass. This will print "MyClass class created"
a = MyClass()
# Run the method - should return 12345
print a.f()
# Make another instance of the class to illustrate they are separate.
b = MyClass()
# Set a.i to another value.
a.i = 1
# Note the result
print a.f()
print b.f()
順便說一句,你不必調用它的自我,你可以說它是任何你喜歡的。它將永遠是第一個參數。
我明白了,如果你願意,'自我'會改變範圍嗎?爲了說「即將訪問這個值'我',但首先我需要說出它在哪裏,因爲它不是方法的本地?」 – sm1991 2009-11-20 11:19:22
請不要大寫「自我」。它寫的是「自我」。小寫。你在閱讀什麼Python教程?請提供鏈接或圖書的名稱。 – 2009-11-20 11:12:09