摘要:學(xué)習(xí)廖雪峰官方網(wǎng)站教程總結(jié)面向?qū)ο缶幊炭偨Y(jié),供日后參考類和實例類的定義限制實例只能添加指定的屬性類屬性初始化值,創(chuàng)建實例必須綁定的屬性變量設(shè)置,保證類內(nèi)部數(shù)據(jù)安全創(chuàng)建類,實質(zhì)上是元類,類的定義本質(zhì)上就是利用創(chuàng)建類先定義函數(shù)創(chuàng)建實例報錯,不能
學(xué)習(xí)廖雪峰官方網(wǎng)站python教程總結(jié)
python面向?qū)ο缶幊蘋OP(Object Oriented Programming)總結(jié),供日后參考
1.類和實例
#類的定義 class Student(object): #限制實例只能添加指定的屬性 __slots__ = ("sex","age") #類屬性 school = "QingHua" #初始化值,創(chuàng)建實例必須綁定的屬性 def __init__(self,name,score): #private變量 self.__name = name self.__score = score #設(shè)置getter,setter保證類內(nèi)部數(shù)據(jù)安全 def get_name(self): return self.__name def get_score(self): return self.__score def set_name(self,name): self.__name = name def set_score(self,score): self.__score = score def hello(self,name="world"): print("Hello, %s." % name) #type()創(chuàng)建類,type()實質(zhì)上是元類(metaclass),類的定義本質(zhì)上就是利用type()創(chuàng)建類 def fn(self, name="world"): # 先定義函數(shù) print("Hello, %s." % name) Student = type("Student",(object,),dict(hello=fn)) #創(chuàng)建實例 jim = Student("Jim",120) print(jim.school) #QingHua print(jim.name) #Jim print(Student.school) #QingHua jim.age = 20 jim.height = 170 #報錯,不能添加__slots__未指定的屬性
2.@property
上例中,為了保護內(nèi)部數(shù)據(jù)的安全,我們使用setter,getter方式封裝數(shù)據(jù),能夠防止用戶隨心所欲地修改數(shù)據(jù),但是不夠簡潔。使用@property裝飾器可以幫助我們改造成我們想要的樣子
class Student(object): def __init__(self,birth): #private變量 self.__birth = birth @property def birth(self): return self.__birth @birth.setter def birth(self,value): self.__birth = value @property def age(self): return 2018-self.__birth #birth為可讀寫屬性,age是只讀屬性 s = Student(1995) s.birth #實際轉(zhuǎn)化為s.get_birth 結(jié)果:1995 s.birth = 1996 #實際轉(zhuǎn)化為s.set_birth s.age #22 s.age = 20 #報錯,當(dāng)前age為只讀屬性
3.繼承和多態(tài)
class Animal(object): def run(self): print("Animal is running") class Dog(Animal): def run(self): print("Dog is runing") class Cat(Animal): pass dog = Dog() cat = Cat() dog.run() #Dog is running Dog類重寫了Animal的run方法 cat.run() #Animal is running Cat類繼承了Animal的run方法 #多態(tài) def run_log(obj): obj.run() run_log(Animal()) #Animal is running run_log(Dog()) #Dog is running #傳說中的file-like object class other(object): def run(): print("other is running") #傳入任何實現(xiàn)run方法的對象都可以,這就是動態(tài)語言多分魅力 run_log(other) #other is running
4.自定義類
#__str__讓class作用于print() class Student(object): def __init__(self,name): self.name = name def __str__(self): return "Student name:%s" % self.name #__repr__用于調(diào)試服務(wù),__str__用于用戶打印 __repr__ = __str__ print(Student("Tom")) # Student name:Tom #__iter__ #將class處理成tuple或list可迭代 class Fib(object): def __init__(self): self.a,slef.b = 0,1 def __iter__(self): return self def __next__(self): self.a,self.b = self.b,self.a+self.b if self.a>100 raise StopIteration() return self.a for n in Fib(): print(n) #1 1 2 3 5 8 13 21 34 55 89 #__getitem__() __getattr__() __call__()方法,以后用的時候具體了解
5.枚舉類
from enum import Enum Month = Enum("Month",("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")) for name,member in Month.__members__.items(): print(name,"=>",member,",",member.value) #value屬性自動賦給成員int變量,默認從1開始 #Enum派生自定義類 from enum import Enum,unique @unique class Weekday(Enum): Sun = 0 Mon = 1 Tue = 2 Wed = 3 Thu = 4 Fri = 5 Sat = 6 #@unique裝飾器幫助我們檢查保證沒有重復(fù)值
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41372.html
摘要:面向?qū)ο缶幊讨镁幊淌鞘裁创蠹液茫鳛樾“祝罱鼘W(xué)習(xí)了很多編程的知識,因為腦容量有限,特此一一按照學(xué)習(xí)順序記錄下來,如果哪里有錯誤,還請大神盡快指出,以免誤導(dǎo)他人。。。繼承也允許把一個派生類的對象作為一個基類對象對待。 Python面向?qū)ο缶幊讨?OOP編程是什么 大家好,作為小白,最近學(xué)習(xí)了很多Python OOP編程的知識,因為腦容量有限,特此一一按照學(xué)習(xí)順序記錄下來,如果哪里有...
摘要:類的方法概覽首先回顧一下常見的三種方法實例接口方法類方法靜態(tài)方法標準書寫方式如下我們最常用的其實就是普通的接口方法,其他兩個需要用類似裝飾器的寫法來標注。類方法接受一個作為參數(shù),它是指向本身的,并不是所創(chuàng)建的實例。 類的方法概覽 首先回顧一下Python OOP常見的三種方法: instance method 實例/接口方法 class method 類方法 static...
摘要:時代,如果需要手動繼承,如多態(tài)多態(tài)是指,不同的子類對象調(diào)用相同的父類方法,會產(chǎn)生多態(tài)多樣結(jié)果的編程特性。 參考:黑馬程序員教程 - Python基礎(chǔ) 面向?qū)ο?OOP三大特性,且三個特性是有順序的: 封裝 繼承 多態(tài) 封裝 指的就是把現(xiàn)實世界的事務(wù),封裝、抽象成編程里的對象,包括各種屬性和方法。這個一般都很簡單,不需要多講。 唯一要注意的就是:推薦從小往大開始封裝、開發(fā)類。比如手槍...
摘要:反對者在某些領(lǐng)域?qū)Υ擞枰苑裾J。下面再引用一段來自維基百科中關(guān)于的歷史。類的更嚴格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。類還可以有運行時表示形式元對象,它為操作與類相關(guān)的元數(shù)據(jù)提供了運行時支持。 在開始部分,請看官非常非常耐心地閱讀下面幾個枯燥的術(shù)語解釋,本來這不符合本教程的風(fēng)格,但是,請看官諒解,因為列位將來一定要閱讀枯燥的東西的。這些枯燥的屬于解釋,均來自維基百科。 1、問題...
閱讀 1270·2021-11-23 09:51
閱讀 2658·2021-09-03 10:47
閱讀 2243·2019-08-30 15:53
閱讀 2426·2019-08-30 15:44
閱讀 1379·2019-08-30 15:44
閱讀 1204·2019-08-30 10:57
閱讀 1932·2019-08-29 12:25
閱讀 1096·2019-08-26 11:57