1. 程式人生 > >(Python第七天)類

(Python第七天)類

方法 .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第七天)類