輕松學會面向對象第2篇---屬性與方法
接上文,是什么很重要,而你最好不要強行的將編程領域的概念與現實生活中的事物相關聯,那么,我們就從代碼形式上入手,在缺少代碼實踐之前,暫且用這種笨拙但有效的方法來學習面向對象。
1. 什么屬性
什么是屬性?極難定義,因此,不下定義,直接上代碼,我告訴你,代碼里哪些是屬性
class Book():
def __init__(self, _name, _author, _price):
self.name = _name # 書名
self.author = _author # 作者
self.price = _price # 價格
在上面這段代碼里,name, author, price就是屬性,它們分別表示書的書名,作者,價格。面向對象這種編程范式,有助于我們去思考構建程序,Book這個類,可以和現實中的書建立起聯系,你可能不理解類,但你還沒看過書么,想一想關于書,你還能想到什么?
頁數
出版日期
出版社
重量
腰封
尺寸
關于書,你可以找到很多很多與其相關的可用來描述它的詞,這不都是書的屬性么?你也可以把這些屬性加到代碼里,你寫的Book類可以和我寫的Book類不相同,沒人規(guī)定Book類該怎么寫,全憑你意愿,但你從不能在類里加一個年齡(age)的屬性吧,這就扯淡了,因此我說,面向對象有助于我們思考構建代碼。
2. 什么是方法
老規(guī)矩,先上代碼
class Dog():
def __init__(self, _name, _age):
self.name = _name
self.age = _age
def eat_moon(self):
print("天狗吃月")
古時候的人類,科學認知有限,月食這種事情祖先們是無法理解的,因此有天狗吃月說法。據說月食發(fā)生時,古人們就敲臉盆弄出聲響,想借此將天狗嚇走,當然,最后月亮還會回來的,人們便真的以為是自己嚇走了天狗。
我上面定義了一個類,類的名字叫Dog,它有name和age兩個屬性,同時還有一個eat_moon方法。在類里面定義的函數,就不叫函數,而是叫方法。
是不是覺得很奇特,還有點別扭?試想,全世界的教科書和媒體都把獅子改叫成老虎,把老虎改叫成獅子,那么20年后人就真的會把今天的老虎叫成獅子,他們一點都不覺得奇怪。我想強調的是,你之所以不習慣,覺得別扭,覺得奇特,是因為你還不夠謙卑,你不習慣,它也這么叫,就是這么強勢,愛咋地咋地。編程語言這東西不是為你設計的,不考慮你的感受。
方法,是對行為的描述,狗狗還會干什么?
吃屎
撒尿
撕床單
看家護院
發(fā)情
很多很多,你可以把這些方法寫到類里啊,只要你愿意。
3. 他們有什么用
有什么用,不是你現在該去考慮的問題,學習一定是要步步為營的,屬性是什么,方法是什么,是什么很重要,先解決這個問題,在去關心怎么用。知道怎么用,并不一定有助于你理解它是什么。真想知道他們有什么用,繼續(xù)看我的文章。
4. 本文的瑕疵
本文在介紹屬性和方法時,存在很多瑕疵,有些甚至可以說是錯誤,但眼下,這是我能想到的最容易理解的講述方法,至于一些錯誤的認識和理解,放在以后去修正。如果一上來就給你講最深刻的理解,百分之九十九的人就蒙了,先從簡單的理解入手吧。
