学习内容:《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_name
self.last_name = last_name
self.age = age
self.job = job
def 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_name
self.last_name = last_name
self.age = age
self.job = job
def 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 = make
self.model = model
self.year = year
self.odometer_reading = 0
def 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 = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self,miles):
self.odometer_reading += miles
class Battery:
def __init__(self,battery_size=90):
self.battery_size = battery_size
def 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.=是等于、赋值,==等于是比较,!=是比较