編程只是 if ; 為了少寫重覆的代碼,有了迴圈 for/while; 但碰到很長的重覆代碼,可能用一個迴圈難以實現,所以出現了面向對象的思想: 類:就是你的迴圈主體 實例:就是對你的迴圈的一次調用 概念: 1. 在Python中,首字母大寫的,名稱指的是類。這個類定義中的括弧是空的 2. 類包括 ...
編程只是 if ;
為了少寫重覆的代碼,有了迴圈 for/while;
但碰到很長的重覆代碼,可能用一個迴圈難以實現,所以出現了面向對象的思想:
類:就是你的迴圈主體
實例:就是對你的迴圈的一次調用
概念:
1. 在Python中,首字母大寫的,名稱指的是類。這個類定義中的括弧是空的
2. 類包括 “屬性“ 和 “方法“ 兩部分。一個實例是類的一次調用。比如練習1中,ins_rest = Resturant("BaXianGe", "ChineseFood") 是類Resturant的一個實例,對一個類可以創建多個實例。
3. 類中的函數稱為方法,包括__init__。__init__是一個特殊的方法,每次創建某個類的實例時,都會自動運行該方法
4. 形參self必不可少,實參(self 以外的參數)是自己單獨定義的,比如下麵練習1的 restaurant_name 和cuisine_type。self直接指向實例本身,當創建一個新的實例時,可以理解為self就是這個實例,創建完實例後,就可以對實例調用類里的方法。
5. 屬性包括類屬性、實例屬性。所有self跟著的參數都是這個類的實例屬性,比如self.restaurant_name。在方法之外,類之內定義的屬性是類屬性。類屬性對所有實例都相同,在這個類中是固定值;實例屬性可以在每個實例中不同。
練習1: 創建一個名為Restaurant 的類,其方法__init__() 設置兩個屬性:restaurant_name 和cuisine_type 。創建一個名為describe_restaurant() 的方法和一個名為open_restaurant() 的方法,其中前者列印前述兩項信息,而後者列印一條消息,指出餐館正在營業。
class Resturant(): def __init__(self, restaurant_name, cuisine_type): #所有self跟著的參數都是這個類的實例屬性 self.restaurant_name = restaurant_name self.cuisine_type = cuisine_type def describe_restaurant(self): print("This resturant is "+self.restaurant_name+" "+self.cuisine_type) def open_restaurant(self): print("This resturant is open!")
ins_rest = Resturant("BaXianGe", "ChineseFood") ins_rest.describe_restaurant() ins_rest.open_restaurant() ins_rest2 = Resturant("BaXi", "Pizza") ins_rest2.describe_restaurant() ins_rest2.open_restaurant()
練習2: 創建一個名為User 的類,其中包含屬性first_name 和last_name ,還有用戶簡介通常會存儲的其他幾個屬性。在類User 中定義一個名
為describe_user() 的方法,它列印用戶信息摘要;再定義一個名為greet_user() 的方法,它向用戶發出個性化的問候。
class User(): def __init__(self, first_name, last_name, sex, age): self.first_name = first_name self.last_name = last_name self.sex = sex self.age = age def describe_user(self, level): # self.level = level # level是只屬於方法describe_user的局部屬性,self.level=level,則將level賦值給了類屬性 -- 類里的其他方法也可以調用這個屬性 print(self.first_name + self.last_name + "is a " + self.sex + "with " + str(self.age) + "and level is " + level) # age是數值型,必須轉成字元才可以列印出來 def greet_user(self, act): print("Sent a " + act + "email to this person.") client1 = User('Tim', 'Potter', 'male', 37) client1.describe_user('VIP') client1.greet_user('Welcome')
練習3: 在為完成練習1而編寫的程式中,添加一個名為number_served 的屬性,並將其預設值設置為0。根據這個類創建一個名為restaurant 的實例;列印有多少人在這家餐館就餐過,然後修改這個值並再次列印它。添加一個名為set_number_served() 的方法,它讓你能夠設置就餐人數。調用這個方法並向它傳遞一個值,然後再次列印這個值。添加一個名為increment_number_served() 的方法,它讓你能夠將就餐人數遞增。調用這個方法並向它傳遞一個這樣的值:你認為這家餐館每天可能接待的就餐人數。
class Resturant2(): def __init__(self, restaurant_name, cuisine_type): #所有self跟著的參數都是這個類的實例屬性 self.restaurant_name = restaurant_name self.cuisine_type = cuisine_type self.number_served = 0 def describe_restaurant(self): print("This resturant is "+self.restaurant_name+" "+self.cuisine_type) def open_restaurant(self): print("This resturant is open!") def set_number_served(self, num_served): #方法中的參數是調用方法時需要輸入的參數,可以只作用在該方法 self.number_served = num_served print("There are "+ str(self.number_served) + " people.") def increment_number_served(self, num_incr): self.number_served += num_incr print("This resturant can serve " + str(self.number_served) + " a day.") ins_rest3 = Resturant2('BaXianGe','ChineseFood') ins_rest3.set_number_served(6)
在理解到這一步後,可以接著研究類的繼承。