和函数一样,类也可以导入,将类存储在模块中,并在主程序中导入类,这样不至于让主程序过于复杂。
导入单个类
我们将上一期定义的class Pet 存储在pet.py中:
pet.py
class Pet(): def __init__(self,name,ptype): #初始化 name和 ptype属性 self.name=name self.ptype=ptype def drink_water(self): #定义一个喝水的方法 print("My pet is a "+self.ptype+",it called "+self.name.title()+";Now it is drinking") def play_ball(self): #定义一个打球的方法 print(self.name.title()+" is playing ball")
第一行:我们创建一个Pet类
第二行:初始化方法__init__()是Python的内置函数,init 前后各有两个下划线,这是固定的写法,你只需要知道,当你创建实例(本例中就是你指定的具体的小宠物,下面还会讲到)时,python都会自动运行这个init方法,同时我们传入了三个形参,self 必须位于第一个,每个与类相关联的方法调用时均会自动传递实参self,本例中我们创建实例时只需要传递实参name和实参ptype即可。
第三行:注释
第四、五行:以self为前缀的变量可以供类中其他方法进行使用,我们将形参name赋值给self.name ,类里面的其他方法就可以使用self.name来使用形参name的值,像这样的变量我们称之为属性第六行:定义一个喝水的方法,方法中含有一个形参self
第七行:注释
第八行:打印宠物的类型、姓名,并打印小狗正在喝水,调用小狗属性,如名字时,只需要使用 self.name 即可
第九行:定义一个玩球的方法
第十行:注释
第十一行:打印特定名字的宠物正在玩球
my_pet.py
from pet import Petmy_little_dog=Pet("Doggy","dog")my_little_dog.drink_water()
第一行:从pet.py 导入Pet类,使用from 文件名 import 类名
第二行:实例化Pet() 类传入两个实参
第三行:通过实例化的对象调用Pet的drink_water()的方法。
看看执行结果:
从一个模块导入多个类
如果我们希望调入其他模块内的多个类,python也给我们提供了方法
pet_second.py:
class Pet(): def __init__(self,name,ptype): #初始化 name和 ptype属性 self.name=name self.ptype=ptype def drink_water(self): #定义一个喝水的方法 print("My pet is a "+self.ptype+",it called "+self.name.title()+";Now it is drinking") def play_ball(self): #定义一个打球的方法 print(self.name.title()+" is playing ball")class Tail(): def __init__(self,tail_length="long"): self.tail_length=tail_length def shake_tail(self): print("the pet has a " +self.tail_length+"; it is shaking tail , it shows it likes you!")class Dog(Pet): def __init__(self,name,ptype): super().__init__(name,ptype) self.age=5 self.tail=Tail() def sit_down(self): print(self.name+" is now sitting!") def drink_water(self): print("Now it is drinking")
my_se_pet.py
from pet_second import Pet ,Tailmy_little_pet=Pet("goofy","dog")my_little_pet.drink_water()my_big_pet=Tail()my_big_pet.shake_tail()
第一行:从my_se_pet.py 导入Pet、Tail,使用from 文件名 import 类名
第二行:实例化Pet() 类传入两个实参"goofy","dog"
第三行:通过实例化的对象调用Pet的drink_water()的方法。
第四行:实例化Tail() 类
第五行:通过实例化的对象调用Tail的shake_tail()的方法。
看看打印结果:
导入整个模块
pet_second.py:
class Pet(): def __init__(self,name,ptype): #初始化 name和 ptype属性 self.name=name self.ptype=ptype def drink_water(self): #定义一个喝水的方法 print("My pet is a "+self.ptype+",it called "+self.name.title()+";Now it is drinking") def play_ball(self): #定义一个打球的方法 print(self.name.title()+" is playing ball")class Tail(): def __init__(self,tail_length="long"): self.tail_length=tail_length def shake_tail(self): print("the pet has a " +self.tail_length+"; it is shaking tail , it shows it likes you!")class Dog(Pet): def __init__(self,name,ptype): super().__init__(name,ptype) self.age=5 self.tail=Tail() def sit_down(self): print(self.name+" is now sitting!") def drink_water(self): print("Now it is drinking")
my_th_pet.py
import pet_secondmy_cat=pet_second.Pet("Kitty","Cat")my_cat.play_ball()
第一行:从my_se_pet.py 导入整个模块
第二行:实例化Pet() 类传入两个实参"Kitty","Cat"
第三行:通过实例化的对象调用Pet的play_ball()的方法。
看看执行结果:
上期答案与本期习题
1.定义一个父类Car ,Car中初始化函数有一个属性是car_type,另一个属性是car_year. Car中还有一个方法,该方法名成为oil_consume . 该方法打印car_type +"oil consume is high" . 再创建一个子类,子类继承父类属性和方法,实例化子类,并用这个实例化对象调用父类中的属性并打印,并且调用父类中的oil_consume方法
class Car(): def __init__(self,car_type,car_year): self.car_type=car_type self.car_year=car_year def oil_consume(self): print(self.car_type + " oil consume is high")class Suv(Car): def __init__(self,car_type,car_year): super().__init__(car_type,car_year)my_SUV=Suv("Big","2018")my_SUV.oil_consume()
执行情况:
本期习题:
1.定义一个类,并将类存储在一个模块中,从另一个模块中导入这个类,并实例化这个类,通过实例化对象调用这个类中的方法
更多免费资料,请关注公众号