花开清香

python中“类”

方法

_ init_()

一种默认方法。

class Dog():
    def __init__(self, name, age):	# initialize初始化的缩写
        self.name = name	#这两句有点难理解。本质上说把右边的name和上边的变量name换成n,age同,不影响结果。这句话是说,左边是:变量self作为类的属性name,右边是变量name。右边后期是要赋值的,右边传入什么实参会储存在变量name里,这个储存结果到时候就是self作为类的属性name。就比如说,已经初始化了一条共同意义上的狗,这个时候的这条狗就是self,这条狗有name和age两个共同意义上的属性,将来实例化的过程中,要靠_init_中的变量name和age来传递实例的实参,当然这个变量可以叫任何名字,只要正确传递给这个叫self的初始化的狗就行。
        self.age = age

    def sit(self):
        print(self.name.title() + "is sitting.")

    def roll_over(self):
        print(self.name.title() + " rolled over")

my_dog = Dog('willie', 6) #self就是将要创建的实例化的本身,前边的所有self这个时候换成my_dog运行结果都是一样的,已经试过了。
print(my_dog)#类的实例化
print(type(my_dog))
print("我的狗名字是:" + my_dog.name.title() + "。")
print("我的狗有" + str(my_dog.age) + "了。")
my_dog.sit()
my_dog.roll_over()

输出
<__main__.Dog object at 0x000001CF3EFE4A30>
<class '__main__.Dog'>
我的狗名字是:Willie。
我的狗有6了。
Willieis sitting.
Willie rolled over

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 raed_oaometer(self):
        print("this car has " + str(self.odometer_reading) + " miles on it." )

my_new_car = Car('audi','a4','2016')
print(my_new_car.get_descriptive_name())
my_new_car.raed_oaometer()

输出
2016 Audi A4
this car has 0 miles on it.

修改属性的值

直接修改

my_new_car.odometer_reading = 23
my_new_car.raed_oaometer()

通过方法修改

定义了一个update_odometer()的函数来实现

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 raed_oaometer(self):
        print("this car has " + str(self.odometer_reading) + " miles on it." )
    def update_odometer(self,mileage):
        self.odometer_reading = mileage
        if mileage >= self.odometer_reading
            self.odometer_reading = mileage
        else:
            print("不能把里程数往回调")

my_new_car = Car('audi','a4','2016')
my_new_car.update_odometer(23)
my_new_car.raed_oaometer()

通过方法对属性的值进行递增

继承

编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类 而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

电动汽车是汽车的分类。

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 raed_oaometer(self):
        print("this car has " + str(self.odometer_reading) + " miles on it." )
    def update_odometer(self,mileage):
        self.odometer_reading = mileage
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("不能把里程数往回调")

my_new_car = Car('audi','a4','2016')
my_new_car.update_odometer(23)
print("\n---------my new car---------")
my_new_car.raed_oaometer()

#继承

class ElectricCar(Car):   #创建子类时。父类必须在括号内指定父类名字。
    def __init__(self,make,model,year):  #方法_init_()接受创建Car实例所需的信息
        super().__init__(make,model,year)  #这行代码让python调用ElectricCar的父类的方法_init_(),让ElectricCar实例包含父类的
        # 所有属性。super(),superclass,超类,父类。
        self.battery_size = 70  #电动车特有的电池属性,初始化电池容量
    def describle_battery(self):
        print("this car has " + str(self.battery_size) + "kwh battery.")

my_tesla = ElectricCar ('tesla','model s',2016)
print("\n---------my tesla------------")
print(my_tesla.get_descriptive_name())
my_tesla.describle_battery()

输出

---------my new car---------
this car has 23 miles on it.

---------my tesla------------
2016 Tesla Model S
this car has 70kwh 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 raed_oaometer(self):
        print("this car has " + str(self.odometer_reading) + " miles on it." )
    def update_odometer(self,mileage):
        self.odometer_reading = mileage
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("不能把里程数往回调")

my_new_car = Car('audi','a4','2016')
my_new_car.update_odometer(23)
print("\n---------my new car---------")
my_new_car.raed_oaometer()

class Battery():
    def __init__(self,battery_size=70):
        self.battery_size = battery_size
    def describle_battery(self):
        print("this car has " + str(self.battery_size) + "kwh battery.")
    def get_range(self):
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270
        msg = 'This car can go approximately ' + str(range)
        msg += 'miles on a full charge'
        print(msg)

#继承

class ElectricCar(Car): 
    def __init__(self,make,model,year): 
        super().__init__(make,model,year)  
        self.battery = Battery()	# 左边:ElectricCar的属性battery,self.battery
        						  # 右边:创建一个Battery()实例,默认battery_70的电池
        						  # 相当于把一个实例赋给(储存在)self.battery中

my_tesla = ElectricCar ('tesla','model s',2016)
print("\n---------my tesla------------")
print(my_tesla.get_descriptive_name())
print("\n---------get my tesla range------------")
my_tesla.battery.get_range()
posted @ 2021-03-18 23:55  兰花兰  阅读(86)  评论(0)    收藏  举报