# @Time : 2021/7/31 10:44 上午 # @File : car.py # @Software: PyCharm class Car: def __init__(self,make,model,year,number_served): self.make=make self.model=model self.year=year self.odometer_reading=0 self.number_served=number_served 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.".title()) def update_odometer(self,mileage): if mileage>=self.odometer_reading: self.odometer_reading=mileage else: print("you can't roll back an dodmeter.") def increment_odometer(self,miles): if miles>=0: self.odometer_reading+=miles else: print("you can't roll back an dodmeter.".upper()) def getNumberOfPerson(self): print(f"here are {self.number_served} in this car.") def setNumber(self,number): self.number_served=number def increment_number(self,number): self.number_served+=number def fill_gas(self,gas_v): print(f"here are your gas totolly-{gas_v} L.") #电池类 class Battery: def __init__(self,battery_size=75): self.battery_size=battery_size def describe_battery(self): print(f"This car has a {self.battery_size}-kWh battery.") def get_range(self): '''打印一条消息指出电车续航里程''' if self.battery_size==75: range=260 elif self.battery_size==100: range=315 else: range=0 print(f"the car can go about {range} miles on a full charge.") def upgrade_battery(self): if self.battery_size!=100: self.battery_size=100 class EletricCar(Car): '''电动车的独特之处''' def __init__(self,make,model,year,number_served): '''调用父类"构造函数"''' super().__init__(make,model,year,number_served) self.new_battery_size=75#为子类定义新的属性 self.battery=Battery(75)#对象作为属性,即C++的对象成员 #这个语句是很重要的,是python和C++不同的地方,这里没有使用初始化列表而是直接利用函数调用 #这就是python的风格 def descirbe_battery_size(self):#为子类定义新的方法 print(f"the battery size is {self.new_battery_size}.") def fill_gas(self): print("the electricCar doesn't need gas!".upper()) #实际上python继承的语法和过程都比C++更简单 #尤其是super行语句,实际上就相当于一个简单的函数调用而已 #同样python当然也支持对父类中的方法进行一个重定义 #编程语言总有惊人的一致性,比如对象作为属性这一点,定义一个battery的类,将其对象作为电车的属性
# @Time : 2021/7/31 11:06 上午 # @File : icecreamStand.py # @Software: PyCharm #homeworkPage155 class Restaurant: def __init__(self,name,number_served): self.name=name self.number_served=number_served class IceCreamStand(Restaurant): #注意注意这里之前忽略了 def __init__(self,name,number_served,flavors): super().__init__(name,number_served) self.flavors=flavors#这个参数是一个列表 def describeIceCream(self): for item in self.flavors: print(f"hei,boy,there are some {item} in your ice cream.".title()) #犯了一个低级错误,不指定父类是什么怎么调用父类的构造函数? #对于继承来讲 #需要记住声明继承的父类的位置为定义子类的那一行
# @Time : 2021/7/31 10:44 上午 # @File : main.py # @Software: PyCharm #继承 import car import user my_car=car.EletricCar('Audi','model s',2019,10) print(my_car.get_descriptive_name()) my_car.descirbe_battery_size()#子类特有的方法 my_car.fill_gas()#函数重定义 my_car.battery.describe_battery()#对象成员多了一个调用层次 my_car.battery.battery_size=100 #没有封装性的确可以带来一定的方便 #对象成员的使用可以帮助我们规划代码 my_car.battery.get_range() #编写类时不要从代码语法的角度去考虑 #而应该从顶层的逻辑往下理清框架 #在进行尝试的实践 import icecreamStand as ice ice1=ice.IceCreamStand('az',100,['haaa','abaabaaba']) ice1.describeIceCream() #调用管理员类相关信息 admin=user.Adimin('meng','xiangqian',100,[10,20,30]) admin.show_privileges() #升级电池-page155练习题 myCar=car.EletricCar('Audi','model s',2021,10) myCar.battery.get_range() myCar.battery.upgrade_battery() myCar.battery.get_range() #查看调用myCar.battery.upgrade_battery()前后的输出变化 #这里还是有些细节的,有些问题出现在逻辑上,不好察觉
# @Time : 2021/7/31 11:21 上午 # @File : user.py # @Software: PyCharm class User: def __init__(self,first,last,login_attempts,*otherThing): self.first_name=first self.last_name=last self.other_thing=otherThing self.login_attempts=login_attempts def describe_user(self): print(f"there is a user named {self.first_name+' '+self.last_name}.") print('and there are other things about him:') for item in self.other_thing: print(item) def greet_user(self): print(f"hei,{self.first_name+' '+self.last_name}.") def increment_login_attempts(self): self.login_attempts+=1 def set_login_attempts(self,attempts_new): self.login_attempts=attempts_new def reset_login_attempts(self): self.login_attempts=0 class Adimin(User): def __init__(self,first,last,login_attempts,*otherThing): super().__init__(first,last,login_attempts,*otherThing) self.privileges=['can add post','can delete post','can ban user'] def show_privileges(self): for item in self.privileges: print(f"the '{item}' is one privilege of adminer.")