(Python第七天)類
阿新 • • 發佈:2019-01-23
方法 .get 賬號 功能 turn 方式 bubuko 另一個 余額
一、定義類
所有數據類型都可以視為對象,當然也可以自定義對象。自定義的對象數據類型就是面向對象中的類(Class)的概念。
以下面這種方式定義類:
class nameoftheclass(parent_class): statement1 statement2 statement3
在類的聲明中可以寫任何Python語句,包括定義函數
2)__init__方法
類的實例化使用函數符號,只要將類對象看作是一個返回新的類實例的無參數函數即可
x=MyClass() 該語句創建了一個新的類實例並將該對象賦給局部變量x,這個實例化操作創建了一個空的對象,很多類都傾向於將對象創建為有初始狀態的,因此類會定義一個名為__init__()的特殊方法,如
def __init__(self): self.data=[]
類定義了__init__()方法的話,類的實例化操作會自動為新創建的類實例調用__init__()方法.
這個方法就是pyhton的構造方法,
3)繼承
當一個類繼承另一個類時,它將繼承父類的所有功能(變量和方法)
實例:創建一個叫做person的類,然後創建兩個派生類student和teacher,當兩個類都從person類繼承時,它們的類除了會有person類的所有方法還會有自身用途的新方法和新變量,
1 class Person(object): 2 """ 3 返回具有給定名稱的 Person 對象4 """ 5 6 def __init__(self, name): 7 self.name = name 8 9 def get_details(self): 10 """ 11 返回包含人名的字符串 12 """ 13 return self.name 14 15 16 class Student(Person): 17 """ 18 返回 Student 對象,采用 name, branch, year 3 個參數 19 """ 20 21 def__init__(self, name, branch, year): 22 Person.__init__(self, name) 23 self.branch = branch 24 self.year = year 25 26 def get_details(self): 27 """ 28 返回包含學生具體信息的字符串 29 """ 30 return "{} studies {} and is in {} year.".format(self.name, self.branch, self.year) 31 32 33 class Teacher(Person): 34 """ 35 返回 Teacher 對象,采用字符串列表作為參數 36 """ 37 def __init__(self, name, papers): 38 Person.__init__(self, name) 39 self.papers = papers 40 41 def get_details(self): 42 return "{} teaches {}".format(self.name, ‘,‘.join(self.papers)) 43 44 45 person1 = Person(‘Sachin‘) 46 student1 = Student(‘Kushal‘, ‘CSE‘, 2005) 47 teacher1 = Teacher(‘Prashad‘, [‘C‘, ‘C++‘]) 48 49 print(person1.get_details()) 50 print(student1.get_details()) 51 print(teacher1.get_details())
在student和Teacher類中重寫了Person類的get_details()方法,當我們調用student1和teacher1的get_details()方法時,使用的是各自類(Student和Teacher)中定義的方法
4)多繼承
一個類可以繼承自多個類,具有父類的所有變量和方法
5)刪除對象
使用關鍵字del來刪除對象
6)屬性讀取方法
直接使用屬性可以
7)裝飾器
想要更精確的調整控制屬性訪問權限,可以使用@property裝飾器,@property裝飾器就是負責把一個方法變成屬性調用的
實例:確保沒有人能設置金額為負,並且有個只讀屬性cny返回換算人民幣後的金額
1 class Account(object): 2 """賬號類, 3 amount 是美元金額. 4 """ 5 def __init__(self, rate): 6 self.__amt = 0 7 self.rate = rate 8 9 @property 10 def amount(self): 11 """賬號余額(美元)""" 12 return self.__amt 13 14 @property 15 def cny(self): 16 """賬號余額(人民幣)""" 17 return self.__amt * self.rate 18 19 @amount.setter 20 def amount(self, value): 21 if value < 0: 22 print("Sorry, no negative amount in the account.") 23 return 24 self.__amt = value 25 26 if __name__ == ‘__main__‘: 27 acc = Account(rate=6.6) # 基於課程編寫時的匯率 28 acc.amount = 20 29 print("Dollar amount:", acc.amount) 30 print("In CNY:", acc.cny) 31 acc.amount = -100 32 print("Dollar amount:", acc.amount)
(Python第七天)類