学习内容:《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.=是等于、赋值,==等于是比较,!=是比较




















