為什麼呼叫這個類別裡的函示中的變數不用加函式名稱
不是應該是 類別名稱.函式名稱(函式中變數)
把變數帶入進去後才得到
self.x=3
self.y=4
的物件嗎
還有, 這裡的self根__init__分別是什麼意思, self在變數裡卻不發揮作用
self.變數 代表的是該物件的屬性嗎, 是因為加了self嗎
class point :
def init(self,x , y) :
self.x=x
self.y=y
def show(self) :
print(a.x)
print(a.y)
a=point(3,4)
point.show()
上面這個程式最後面point.show(0)是呼叫類別裡的函式
這裡的self必須要有一個資料
若把self改成a
相當於point(3,4).show() 前者是初始函式已經有資料了 在呼叫第二個函式
後者是給第一個函式資料後再呼叫
有甚麼不同嗎
首先
類別不用以 __init__ 來呼叫
直接 point(x, y) 就可以
class point:
def __init__(self, x, y):
self.x = x
self.y = y
def sum(self):
return self.x + self.y
a = point(3, 4)
print(a)
print(a.x, a.y)
print(a.sum())
為什麼呼叫這個類別裡的函示中的變數不用加函式名稱
不是應該是 類別名稱.函式名稱(函式中變數)
把變數帶入進去後才得到
self.x=3
self.y=4
的物件嗎
呃 類別就是這樣用
__init__ 就是類別初始化會呼叫的
這裡的self根__init__分別是什麼意思, self在變數裡卻不發揮作用
self.變數 代表的是該物件的屬性嗎, 是因為加了self嗎
__init__ 是 初始化
self 的用處就是可以在類別中呼叫自己的屬性之類的東西
如上面的 code
如果你寫成
def sum(self):
return x + y
就一定會報錯
你想知道 self 是什麼
就直接把他 print 出來
沒意外應該會跟 a 長的一模一樣
為什麼呼叫這個類別裡的函示中的變數不用加函式名稱
因為他「自動」幫你做了,底線包起來的方法是魔術方法,所謂魔術,就是你不必知道他怎麼辦到的,反正他就會幫你做好。
這裡的self根__init__分別是什麼意思, self在變數裡卻不發揮作用
self,其實也不一定要叫做self,在方法(method)內,Python會將自己(物件本身)作為第一個參數傳入,這樣就可以在裡面使用自己的屬性與方法了哦。
P.S:如果用不到自己的屬性與方法,可以使用靜態方法裝飾子(@staticmethod
),就不會把自己傳入第一個參數了。
https://www.jianshu.com/p/22a8bedc39fd
建議參考一下python object的生命週期。
不過通常不會調用__new__方法。
另外上面有提到,python固定以兩個下槓包住的是魔術方法,有固定的用途,沒搞懂前不要亂用。
self 就代表這個class產生的物件,所以叫『自己』(self),class裡面每個函數第一個參數都是 self,就是要利於存取物件本身的屬性。借用 DragonH 程式碼說明。
class point:
def __init__(self, x, y):
self.x = x
self.y = y
def sum(self):
return self.x + self.y
a = point(3, 4)
print(a)
print(a.x, a.y)
print(a.sum())