iT邦幫忙

0

python 實體物件

  • 分享至 

  • xImage

為什麼呼叫這個類別裡的函示中的變數不用加函式名稱
不是應該是 類別名稱.函式名稱(函式中變數)
把變數帶入進去後才得到
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() 前者是初始函式已經有資料了 在呼叫第二個函式
後者是給第一個函式資料後再呼叫
有甚麼不同嗎

https://ithelp.ithome.com.tw/upload/images/20190729/20119136hHEQqb43rE.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
dragonH
iT邦超人 5 級 ‧ 2019-07-29 23:17:26

首先

類別不用以 __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 長的一模一樣

ideone

2
黃彥儒
iT邦高手 1 級 ‧ 2019-07-29 23:19:49

為什麼呼叫這個類別裡的函示中的變數不用加函式名稱

因為他「自動」幫你做了,底線包起來的方法是魔術方法,所謂魔術,就是你不必知道他怎麼辦到的,反正他就會幫你做好。

這裡的self根__init__分別是什麼意思, self在變數裡卻不發揮作用

self,其實也不一定要叫做self,在方法(method)內,Python會將自己(物件本身)作為第一個參數傳入,這樣就可以在裡面使用自己的屬性與方法了哦。

P.S:如果用不到自己的屬性與方法,可以使用靜態方法裝飾子(@staticmethod),就不會把自己傳入第一個參數了。

1
froce
iT邦大師 1 級 ‧ 2019-07-29 23:55:46

https://www.jianshu.com/p/22a8bedc39fd
建議參考一下python object的生命週期。

不過通常不會調用__new__方法。

另外上面有提到,python固定以兩個下槓包住的是魔術方法,有固定的用途,沒搞懂前不要亂用。

1
I code so I am
iT邦高手 1 級 ‧ 2019-07-30 11:27:18

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())

我要發表回答

立即登入回答