class
dog:
def__init__
(self,name)
: self.name = name;
defshout
(self)
:print
("我的名字是"
,self.name)
;print
("汪汪汪");
d = dog(
"hello");
d.shout(
);
1.類的構造方法:建構函式就是類的__init__方法,建構函式的第乙個引數是self不能省略。
2.類的屬性(成員變數,類變數):必須要以self加「.」的方式賦值。
3.類中的方法:類中的方法和函式定義的方法基本相同,只是形參的第乙個引數必須是self。
4.私有屬性:定義屬性名字的時候以兩條下劃線開頭,定義為私有屬性後類外不可以訪問類內可以訪問。
5.私有方法在方法名之前加上兩條下劃線。
class
animal
:def
__init__
(self,name)
: self.__name = name;
defshout
(self)
:print
("我是乙隻動物我叫"
,self.__name)
class
dog(animal)
:def
play
(self)
:print
("狗在玩耍");
d = dog(
"lucky");
d.shout();
d.play(
);
1.定義形式:class subclass(baseclass1,baseclass2);
2.python中支援多繼承。
3.如果子類中定義了構造方法則父類的構造方法不會被呼叫,此時可以使用super關鍵字在子類的構造方法中呼叫父類的構造方法super(dog,self).init(「dog」);
4.父類中的私有成員和方法在子類中不會被繼承。
class
animal
:def
shout
(self)
:print
("動物");
class
dog(animal)
:def
shout
(self)
:print
("狗");
class
cat(animal)
:def
shout
(self)
:print
("貓");
d = dog();
c = cat();
d.shout();
c.shout();
print
(isinstance
(d,dog));
#3print
(isinstance
(d,animal));
print
(isinstance
(c,animal));
print
(isinstance
(c,cat));
defanimal_say
(animal:animal)
: animal.shout();
animal_say(d);#2
animal_say(c)
;
1.當子類與父類存在相同的方法時,子類的方法會覆蓋父類的方法,這樣的**在呼叫時總會呼叫子類的方法,這就是多型。
2.多型意味著多種形態,意味著不知道變數引用的是什麼型別也可以對物件進行操作。
3.判斷乙個例項是不是某個物件可以使用isinstance函式。
動態語言特有的鴨子型別
class
dog():
defshout
(self)
:print
("狗");
class
cat():
defshout
(self)
:print
("貓");
d = dog();
c = cat();
defanimal_shout
(animal)
: animal.shout();
animal_shout(d)
;animal_shout(c)
;
1.在鴨子型別中,乙個物件的有效語義不是由繼承自特定的類或實現特定的介面決定的,而是由當前方法的屬性集合決定的。
2.這樣乙個函式可以接受乙個任意含有叫這種方法的物件,如果需要呼叫的方法不存在,那麼將引發乙個執行時的錯誤。
3.因為python是一門動態語言,在函式沒有被執行的時候,程式不能斷定資料的型別,只有在執行相關語句時才能去呼叫相關的方法。雖然我們沒有使用繼承但我們仍然可以實現多型。
class
animal
: name =
"動物"
;#類變數
print
(animal.name)
;a = animal();
#例項變數
print
(a.name)
;animal.name =
"類變數修改"
;print
(animal.name)
;a.name =
"實力變數修改"
print
(animal.name)
;
1.類變數可以通過例項變數呼叫,也可以不通過。
2.不能通過例項變數修改類變數。
靜態方法
定義靜態方法將引入乙個新的概念------裝飾器。
class
animal
: name =
"動物"
; @staticmethod
defplay()
:print
("靜態方法");
animal.play();
a = animal();
a.play(
);
1.定義靜態方法就是在定義函式上面填一行@staticmethod(不能有空行),這是乙個裝飾器語法。
2.靜態方法不再有第乙個引數self,所以靜態變數本身不能呼叫成員變數和成員方法。
3.靜態方法不需要例項化後使用。
類方法
class
animal
: name =
"動物"
; @classmethod
defplay
(cls)
:print
("類方法"
,cls.name)
;animal.play();
a = animal();
a.play(
);
和靜態方法不同的是類方法和成員方法一樣都有乙個初始的引數,但是這個引數不同於成員方法,成員方法第乙個引數指向的是例項而類方法指向的則是定義的類本身,所以類方法可以讀取和修改類變數。 python物件導向 類與物件
嗯,本學期開始學python物件導向的內容了,唔,前面的內容會在後期有時間慢慢補的。類與物件 我生活中有這樣一句話叫 物以類聚,人以群分 重點是前面那句,什麼是類呢,就是一類事物,比如人類 動物類 這是乙個大的範圍 類是封裝物件的屬性和行為的載體,反過來說,具有相同屬性和行為的一類實體被稱為類 而物...
物件導向過程與物件導向
物件導向過程與物件導向 1 程式的發展經歷了兩個階段 面向過程 物件導向。2 對於物件導向與面向過程可以用乙個例子解釋,如乙個木匠要做乙個盒子,那麼這個盒子的出發點會有兩種方式 物件導向 先想好要做的盒子,之後在去找相應的工具去做。面向過程 不去想要做什麼樣的盒子,隨需取工具。物件導向三大特徵 封裝...
python 面向過程程式設計與物件導向程式設計
面向過程 核心就是過程二字,過程指的是解決問題的步驟,設計一條流水線,機械式的思維方式.優點 複雜的問題流程化,進而簡單化.缺點 可擴充套件性差.物件導向 核心就是物件二字.物件就是特徵與技能的結合.上帝視角.優點 可擴充套件性強,缺點 程式設計複雜度高.應用場景 使用者需求經常變化,網際網路應用,...