学习内容:《python编程:从入门到实践》第二版
知识点:
类,父类与子类的继承,调用函数方法等。
练习内容:
练习9-7:管理员 管理员是一种特殊的用户。编写一个名为Admin的类,让它继承为完成练习9-3或练习9-5而编写的User类。添加一个名为privileges的属性,用于存储一个由字符串(如"can add post"、"can delete post"、"can ban user"等)组成的列表。编写一个名为show_privileges()的方法,显示管理员的权限。创建一个Admin实例,并调用这个方法。
练习9-8:权限 编写一个名为Privileges的类,它只有一个属性privileges,其中存储了练习9-7所述的字符串列表。将方法show_privileges()移到这个类中。在Admin类中,将一个Privileges实例用作其属性。创建一个Admin实例,并使用方法show_privileges()来显示其权限。
练习9-9:电瓶升级 在本节最后一个electric_car.py版本中,给Battery类添加一个名为upgrade_battery()的方法。该方法检查电瓶容量,如果不是100,就将其设置为100。创建一辆电瓶容量为默认值的电动汽车,调用方法get_range(),然后对电瓶进行升级,并再次调用get_range()。你将看到这辆汽车的续航里程增加了。
我的代码&运行结果:
class User:def __init__(self,first_name,last_name,age,job):self.first_name = first_nameself.last_name = last_nameself.age = ageself.job = jobdef describe_user(self):print(f"用户信息如下:")print(f"姓名:{self.first_name} {self.last_name}")print(f"年龄:{self.age}")print(f"职业:{self.job}")def greet_user(self):print(f"Hello, {self.first_name} {self.last_name}\n")class Admin(User):def __init__(self,first_name,last_name,age,job):super().__init__(first_name,last_name,age,job)def show_privileges(self):privileges =["can add post","can delete post","can ban user"]for privilege in privileges:print(f"the adminer's privileges :{privilege}")admin1 = Admin('朱','大','10','学生')
admin1.describe_user()
admin1.greet_user()
admin1.show_privileges()
练习
class User:def __init__(self,first_name,last_name,age,job):self.first_name = first_nameself.last_name = last_nameself.age = ageself.job = jobdef describe_user(self):print(f"用户信息如下:")print(f"姓名:{self.first_name} {self.last_name}")print(f"年龄:{self.age}")print(f"职业:{self.job}")def greet_user(self):print(f"Hello, {self.first_name} {self.last_name}\n")class Privileges:def show_privileges(self):privileges =["can add post","can delete post","can ban user"]for privilege in privileges:print(f"the adminer's privileges :{privilege}")class Admin(User):def __init__(self,first_name,last_name,age,job):super().__init__(first_name,last_name,age,job)self.privileges = Privileges()admin1 = Admin('朱','大','10','学生')
admin1.describe_user()
admin1.greet_user()
admin1.privileges.show_privileges()
练习
class Car:"""一次模拟汽车的简单尝试。"""def __init__(self,make,model,year):self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):long_name = f"{self.year} {self.make} {self.model}"return long_name.title()def read_odometer(self):print(f"This car has {self.odometer_reading} miles on it.")def update_odometer(self,mileage):if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self,miles):self.odometer_reading += milesclass Battery:def __init__(self,battery_size=90):self.battery_size = battery_sizedef describe_battery(self):print(f"This car has a {self.battery_size}-kWh battery.")def upgrade_battery(self):if self.battery_size != 100:self.battery_size = 100#print(f"This car has updated, with a {self.battery_size}-kWh battery.")class ElectricCar(Car):def __init__(self,make,model,year):super().__init__(make,model,year)self.battery = Battery()#注意这里的self.battery 和class battery里面的self.battery_size弄混淆了!my_tesla = ElectricCar('tesla','model s',2019)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.upgrade_battery()my_tesla.battery.describe_battery()
总结&问题:
1.每一个类里面的属性名字切记不能混淆
2.def __init__(self,battery_size=90)新增属性的原始值,可在定义的时候给出,可以先不写出
3.super().__init__(make,model,year)继承时,什么时候有self,super后的()等细节容易错
4.self.battery = Battery()子类和某一特性单独建立的类之间一定不能忘记这部分联系。
5.my_tesla.battery.describe_battery()调用函数时,不能忘记中间需要加上类的名字再加点。后在加方法。
6.=是等于、赋值,==等于是比较,!=是比较