PythonUnit9类


"""============================================================================================="""
"""===================================== 创建/使用类==============================================="""
"""============================================================================================="""
if 0:
    class Dog():#定义Dog类
        #定义__init__方法
        #根据Dog类创建新实例时都会自动运行该方法
        #名称中开头和末尾各有两个下划线 避免Python默认方法与普通方法发生名称冲突
        def __init__(self,name,age):
            """self是必不可少的但不一定要叫self"""
            """初始化属性name和age"""
            self.name = name
            self.age = age
            #形参self 必不可少,还必须位于其他形参的前面。
            #每个与类相关联的方法调用都自动传递实参self
            #因此我们不需要传递它。根据Dog类创建实例时,只需给最后两个形参(name 和age )提供值。

        def sit(self):
            """模拟小狗被命令时蹲下"""
            #.title(),首个字母大写,可有可无
            print(self.name.title() + " is now sitting.")

        def roll_over(self):
            """模拟小狗被命令时打滚"""
            print(self.name.title() + " rolled over.")



    #类实例化
    my_dog = Dog('willie', 6)

    
    #访问类的属性
    print(my_dog.name.title() + " rolled over.")
    print("My dog is " + str(my_dog.age) + " years old.")



    #调用类的方法
    my_dog.roll_over()
    my_dog.sit()
    print()

    #再创建一个类实例
    your_dog = Dog('Lucy',2)


    #访问类的属性
    print(your_dog.name.title() + " rolled over.")
    print("My dog is " + str(your_dog.age) + " years old.")


    #调用类的方法
    your_dog.roll_over()
    your_dog.sit()
    
            
"""============================================================================================="""
"""============================================================================================="""
"""=======================================使用类和实例=========================================="""
"""============================================================================================="""
"""============================================================================================="""

if 0:
    class Car():
        def __init__(self,make,model,year):
            self.make = make
            self.model = model
            self.year = year
        def get_descriptive_name(self):
            return (str(self.year) + ' ' + self.make + ' ' + self.model)

    my_car = Car('audi', 'a4', 2016)

    print(my_car.get_descriptive_name())

#属性指定默认值
if 0:
    class Car():
        #实例化需传入参数:make,model,year,
        """利用make,model,year给类变量赋值,初始化后无意义"""
        """只有self.make,self.model,self.year,self.odometer_reading才是真实的类参数"""
        #实例化不需传入参数:odometer_reading
        
        def __init__(self,make = 'BYD',model = '海豹',year = 2000):#函数默认值
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0#默认值
            
        def get_descriptive_name(self):
            return (str(self.year) + ' ' + self.make + ' ' + self.model)
        
        def read_odometer(self):
            """打印一条指出汽车里程的消息"""
            return ("This car has " + str(self.odometer_reading) + " miles on it.")
        
        #传入任意参数增加里程数
        """通过方法修改属性的值复现该用法"""
        def change_odometer(self,data):
            self.odometer_reading += data
            return ("This car has " + str(self.odometer_reading) + " miles on it.")
        
    my_car = Car('audi', 'a4',2016)
    print(my_car.get_descriptive_name())
    print(my_car.read_odometer())
    print(my_car.change_odometer(33))
    print()
    your_car = Car()
    print(your_car.get_descriptive_name())
    print(your_car.read_odometer())
    print(your_car.change_odometer(33))
"""============================================================================================="""
"""============================================================================================="""
"""=====================================修改属性的值=========================================="""
"""============================================================================================="""
"""============================================================================================="""



"""============================================================================================="""
"""=====================================直接修改属性的值============================================"""
"""============================================================================================="""

if 0:
    class Car():
        #实例化需传入参数:make,model,year,
        #实例化不需传入参数:odometer_reading
        def __init__(self,make,model,year):
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0#默认值
        def get_descriptive_name(self):
            return (str(self.year) + ' ' + self.make + ' ' + self.model)
        def read_odometer(self):
            """打印一条指出汽车里程的消息"""
            print("This car has " + str(self.odometer_reading) + " miles on it.")

    
    my_car = Car('audi', 'a4', 2016)
    
    print(my_car.get_descriptive_name())
    my_car.read_odometer()
    print("修改后:")
    my_car.odometer_reading = 36
    my_car.model = 'A4L'
    my_car.make = 'Audi'
    print(my_car.get_descriptive_name())
    my_car.read_odometer()

"""============================================================================================="""
"""======================================通过方法修改属性的值========================================="""
"""============================================================================================="""

if 0:
    class Car():
        #实例化需传入参数:make,model,year,
        #实例化不需传入参数:odometer_reading
        def __init__(self,make,model,year):
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0#默认值
            
        def get_descriptive_name(self):
            return (str(self.year) + ' ' + self.make + ' ' + self.model)
        
        def read_odometer(self):
            """打印一条指出汽车里程的消息"""
            print("This car has " + str(self.odometer_reading) + " miles on it.")
            
        def update_odometer(self,mileage):
            """里程只能增不能降"""
            if mileage > self.odometer_reading:
                self.odometer_reading = mileage
            else:
                print("ERR!!! You can't roll back an odometer!")

    
    my_car = Car('audi', 'a4', 2016)
    
    my_car.read_odometer()
    my_car.update_odometer(10)
    my_car.read_odometer()
    my_car.update_odometer(5)
    my_car.read_odometer()
    my_car.update_odometer( my_car.odometer_reading + 5 )
    my_car.read_odometer()


"""============================================================================================="""
"""========================================继承=================================================="""
"""============================================================================================="""
if 0:
    
    #父类
    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 = str(self.year) + ' ' + self.make + ' ' + self.model
            return long_name.title()
        
        def read_odometer(self):
            print("This car has " + str(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!")
                
    #子类
    class ElectricCar(Car):
        """电动汽车的独特之处"""
        def __init__(self, make, model, year,BATT = 100):
            """初始化父类的属性"""
            #super()是一个特殊函数,帮助Python将父类和子类关联起来。
            #父类也称为超类超(superclass),名称super因此而得名。
            super().__init__(make, model, year)

            
            #子类所持有父类不具有的属性
            self.BATT = BATT

        #子类所持有父类不具有的函数
        def describe_battery(self):
            """打印一条描述电瓶容量的消息"""
            print("This car has a " + str(self.BATT) + "kWh battery.")
        
        #重写父类方法
        #子类要重写的父类方法:同名,这样相当于屏蔽父类方法,只考虑子类方法
        def get_descriptive_name(self):
            long_name = str(self.year) + ' ' + self.make  + ' ' + self.model + ' (ElectricCar)BATT:' + str(self.BATT)
            return long_name.title()

          
    my_tesla = ElectricCar('tesla', 'model s', 2016 , 12)
    print(my_tesla.get_descriptive_name())
    my_tesla.update_odometer(199)
    my_tesla.read_odometer() 
    my_tesla.describe_battery()




"""============================================================================================="""
"""============================== 将实例用作属性 (类嵌套) ======================================"""
"""============================================================================================="""
if 1:
    #弥补类
    class Battery():
        def __init__(self , BATT = 70):
            """初始化电瓶的属性"""
            self.BATT = BATT
        def describe_battery(self):
            """打印一条描述电瓶容量的消息"""
            print("This car has a " + str(self.BATT) + "kWh battery.")


    #父类
    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 = str(self.year) + ' ' + self.make + ' ' + self.model
            return long_name.title()
        
        def read_odometer(self):
            print("This car has " + str(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!")
                
    #子类
    class ElectricCar(Car):
        """电动汽车的独特之处"""
        """batt 给电池赋初值"""
        def __init__(self, make, model, year, batt = 150):
            """初始化父类的属性"""
            #super()是一个特殊函数,帮助Python将父类和子类关联起来。
            #父类也称为超类超(superclass),名称super因此而得名。
            super().__init__(make, model, year)



            #将实例用作属性(类嵌套)
            self.Batt = Battery(batt)



      
        #重写父类方法
        #子类要重写的父类方法:同名,这样相当于屏蔽父类方法,只考虑子类方法
        def get_descriptive_name(self):
            long_name = str(self.year) + ' ' + self.make  + ' ' + self.model + ' (ElectricCar)BATT:' + str(self.Batt.BATT)
            return long_name.title()

          
    my_tesla = ElectricCar('tesla', 'model s', 2016 )
    print(my_tesla.get_descriptive_name())
    my_tesla.update_odometer(199)
    my_tesla.read_odometer() 
    my_tesla.Batt.describe_battery()




"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""
"""============================================================================================="""


        








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值