Python-继承与对象成员

# @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.")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值