創(chuàng)建和使用類
創(chuàng)建一個(gè)寵物 Pet 類矗晃,根據(jù)該類創(chuàng)建的每個(gè)實(shí)例都將存儲名字和物種,賦予每個(gè)寵物吃飯(eat())和睡覺(sleep())的能力:
class Pet():
def __init__(self, name, species):
self.name = name
self.species = species
def eat(self):
print(self.name.title() + ' is now eating')
def sleep(self):
print(self.name.title() + ' is now sleeping')
__init__()
為類中的函數(shù)豆拨,稱為方法,開頭和末尾各有兩個(gè)下劃線形參 self 必不可少能庆,且必須位于其他形參之前施禾,指向創(chuàng)建實(shí)例本身。
根據(jù)類創(chuàng)建實(shí)例
my_pet = Pet('ben', 'cat')
print("My pet's name is " + my_pet.name.title() + ".")
print("My Pet is a " + str(my_pet.species) + ".")
image-20211220143052069
調(diào)用方法
my_pet.eat()
my_pet.sleep()
image-20211220143124774
使用類和實(shí)例
設(shè)置默認(rèn)值
給上面的例子進(jìn)行補(bǔ)充搁胆,設(shè)置一個(gè)寵物到家的初始時(shí)間默認(rèn)值為 0弥搞,對某個(gè)屬性設(shè)定默認(rèn)值可以不提供形參。
class Pet():
def __init__(self, name, species):
self.name = name
self.species = species
self.initial_time = 0
def eat(self):
print(self.name.title() + ' is now eating')
def sleep(self):
print(self.name.title() + ' is now sleeping')
def read_time(self):
print("My pet has come to my home for " + str(self.initial_time) + " years.")
調(diào)用一下read_time()
image-20211221094954411
修改屬性的值
直接修改屬性的值
my_pet = Pet('ben', 'cat')
my_pet.initial_time = 5
my_pet.read_time()
image-20211221095905957
通過方法修改屬性的值
增加一個(gè) update_time() 的方法渠旁,指定初始時(shí)間
class Pet():
def __init__(self, name, species):
self.name = name
self.species = species
self.initial_time = 0
def eat(self):
print(self.name.title() + ' is now eating')
def sleep(self):
print(self.name.title() + ' is now sleeping')
def read_time(self):
print("My pet has come to my home for " + str(self.initial_time) + " years.")
def update_time(self, time):
self.initial_time = time
調(diào)用
my_pet = Pet('ben', 'cat')
my_pet.update_time(5)
my_pet.read_time()
image-20211221101734667
通過方法對屬性的值進(jìn)行遞增
新增一個(gè) increment_time() 方法攀例,表示較初始值而言增加的時(shí)間
class Pet():
def __init__(self, name, species):
self.name = name
self.species = species
self.initial_time = 0
def eat(self):
print(self.name.title() + ' is now eating')
def sleep(self):
print(self.name.title() + ' is now sleeping')
def read_time(self):
print("My pet has come to my home for " + str(self.initial_time) + " years.")
def update_time(self, time):
self.initial_time = time
def increment_time(self,year):
self.initial_time += year
調(diào)用
my_pet = Pet('ben', 'cat')
my_pet.update_time(3) # 指定初始3年
my_pet.read_time()
my_pet.increment_time(2) # 后來又增加了2年
my_pet.read_time()
image-20211221105421293
繼承
一個(gè)類繼承另一個(gè)類時(shí),它將自動獲得另一個(gè)類的所有屬性和方法顾腊;原有的類稱為父類粤铭,而新類稱為子類。子類繼承了其父類的所有屬性和方法杂靶,同時(shí)還可以定義自己的屬性和方法梆惯。
創(chuàng)建一個(gè) Cat 類,繼承 Pet 的屬性吗垮,同時(shí)可以定義 Cat 特有的屬性垛吗。
class Pet():
def __init__(self, name, species):
self.name = name
self.species = species
def eat(self):
print(self.name.title() + ' is now eating')
def sleep(self):
print(self.name.title() + ' is now sleeping')
class Cat(Pet):
def __init__(self, name, species):
super().__init__(name, species)
self.favourite_food = 'fish'
def describe_food(self):
print("The " + str(self.species) + "'s favourite food is " + str(self.favourite_food) + ".")
調(diào)用
my_cat = Cat("ben","cat")
my_cat.describe_food()
image-20211221142525181
如果子類中的某些屬性與父類不一樣,可以在子類新建方法重新定義來改寫父類烁登。
類的導(dǎo)入和函數(shù)的導(dǎo)入相同职烧。
參考書目:Python編程從入門到實(shí)踐 - Eric Matthes 著,袁國忠 譯