摘要:學習廖雪峰官方網站教程總結面向對象編程總結,供日后參考類和實例類的定義限制實例只能添加指定的屬性類屬性初始化值,創建實例必須綁定的屬性變量設置,保證類內部數據安全創建類,實質上是元類,類的定義本質上就是利用創建類先定義函數創建實例報錯,不能
學習廖雪峰官方網站python教程總結
python面向對象編程OOP(Object Oriented Programming)總結,供日后參考
1.類和實例
#類的定義 class Student(object): #限制實例只能添加指定的屬性 __slots__ = ("sex","age") #類屬性 school = "QingHua" #初始化值,創建實例必須綁定的屬性 def __init__(self,name,score): #private變量 self.__name = name self.__score = score #設置getter,setter保證類內部數據安全 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()創建類,type()實質上是元類(metaclass),類的定義本質上就是利用type()創建類 def fn(self, name="world"): # 先定義函數 print("Hello, %s." % name) Student = type("Student",(object,),dict(hello=fn)) #創建實例 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
上例中,為了保護內部數據的安全,我們使用setter,getter方式封裝數據,能夠防止用戶隨心所欲地修改數據,但是不夠簡潔。使用@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 #實際轉化為s.get_birth 結果:1995 s.birth = 1996 #實際轉化為s.set_birth s.age #22 s.age = 20 #報錯,當前age為只讀屬性
3.繼承和多態
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方法 #多態 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") #傳入任何實現run方法的對象都可以,這就是動態語言多分魅力 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__用于調試服務,__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裝飾器幫助我們檢查保證沒有重復值
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41372.html
摘要:面向對象編程之旅編程是什么大家好,作為小白,最近學習了很多編程的知識,因為腦容量有限,特此一一按照學習順序記錄下來,如果哪里有錯誤,還請大神盡快指出,以免誤導他人。。。繼承也允許把一個派生類的對象作為一個基類對象對待。 Python面向對象編程之旅 OOP編程是什么 大家好,作為小白,最近學習了很多Python OOP編程的知識,因為腦容量有限,特此一一按照學習順序記錄下來,如果哪里有...
摘要:類的方法概覽首先回顧一下常見的三種方法實例接口方法類方法靜態方法標準書寫方式如下我們最常用的其實就是普通的接口方法,其他兩個需要用類似裝飾器的寫法來標注。類方法接受一個作為參數,它是指向本身的,并不是所創建的實例。 類的方法概覽 首先回顧一下Python OOP常見的三種方法: instance method 實例/接口方法 class method 類方法 static...
摘要:時代,如果需要手動繼承,如多態多態是指,不同的子類對象調用相同的父類方法,會產生多態多樣結果的編程特性。 參考:黑馬程序員教程 - Python基礎 面向對象 OOP三大特性,且三個特性是有順序的: 封裝 繼承 多態 封裝 指的就是把現實世界的事務,封裝、抽象成編程里的對象,包括各種屬性和方法。這個一般都很簡單,不需要多講。 唯一要注意的就是:推薦從小往大開始封裝、開發類。比如手槍...
摘要:反對者在某些領域對此予以否認。下面再引用一段來自維基百科中關于的歷史。類的更嚴格的定義是由某種特定的元數據所組成的內聚的包。類還可以有運行時表示形式元對象,它為操作與類相關的元數據提供了運行時支持。 在開始部分,請看官非常非常耐心地閱讀下面幾個枯燥的術語解釋,本來這不符合本教程的風格,但是,請看官諒解,因為列位將來一定要閱讀枯燥的東西的。這些枯燥的屬于解釋,均來自維基百科。 1、問題...
閱讀 1269·2021-11-23 09:51
閱讀 2653·2021-09-03 10:47
閱讀 2242·2019-08-30 15:53
閱讀 2423·2019-08-30 15:44
閱讀 1379·2019-08-30 15:44
閱讀 1201·2019-08-30 10:57
閱讀 1931·2019-08-29 12:25
閱讀 1094·2019-08-26 11:57