你用了個很難舉例的,所以換個例子。
class Dog():
def __init__(self, name, age):
# 設定物件本身(self)屬性(.name/age)為外部參數(name/age)
self.name = name
self.age = age
# 叫的方法
def bark(self, times=1):
return "汪" * times
# 利用 @property,將方法設定為屬性
# 你可以看到物件裡面,內部參數的傳遞都是靠self來傳
@property
def asHumanAge(self):
return self.age * 7
park = Dog("Park", 3)
print(park.name)
print(park.age)
print(park.bark(3))
print(park.asHumanAge)
# 檢查park這個實例裡面,含有什麼屬性和方法
print(dir(park))
在python中,使用者對於屬性和方法是看不出來區別的,只能看他的用法和是不是callable(後面可以加刮號)來看。
to 小魚:
python的物件裡面,__XXXX__這種的,是內建的方法,有其功用,不理解的話建議不要亂覆寫。
這種的就要記一下。
其他的話通常就記個 @property,頂多多記個 @setter、@classmethod而已。
http://seanlin.logdown.com/posts/221362-python-idioms-14-property
不過python的OOP其實蠻多地方要注意的...
有興趣的話推薦看「流暢的python」這本書,寫越久,懂越多,你就越覺得這是pyer必備之神書。
以這個例子而言
Person是物件
name是屬性
init 是方法
self.name是Person物件的name屬性
= name 後面那個name是你帶入__init__方法後面的那個name
不過這些我都沒在記,
會寫程式就好了記那麼多名詞做什麼...
雖然已有解答
但我也提供一個例子供大家參考
因為我也是初學者
當初也在類別class這東西上迷糊了半天
class Round:
def __init__(self, r):
self.radius = r
self.PI = 3.14
print('我出現了')
def per(self):
return self.radius*2*self.PI
def area(self):
return self.radius**2*self.PI
obj = Round(5)
obj2 = Round(10)
print(obj.per())
print(obj.area())
在新建一個類別的時候,為何要有 self.name=name這段
首先你要了解`__init__`的意思
__init__當你實體化時會自動執行
在我的例子中我創了兩個實體化的物件
所以當你執行時,應該會有兩個"我出現了"
右邊的name就是你實體化輸入的參數
可以用我的例子比對一下
左邊的self.name就是可以讓class底下的函數直接使用
這樣你在寫函數會省去很多麻煩,多用幾次就能明白
Round(圓)這個類別有半徑和314這兩個屬性
底下有周長和面積兩個方法
從我的例子就可以了解:
> 屬性就是類別裡重要且可重複使用的
> 如何設定這些程式碼才能簡潔就是個人功力
簡單說python所有東西都能成為物件(類別)
例如我們要寫個銀行類別
重要屬性戶名和戶內金額
功能可能有存款和提
甚至一個橘子也可以是物件
屬性有甜度、重量
以此為依據
功能也許需要分類高級和次級的橘子
所有不是有人說程式幾乎無所不能
重點看你能不能實做出來罷了