一、Python类的基础概念
(一)类的定义与作用
在Python中,类是一种创建对象的蓝图或模板。它就像一个汽车的设计图纸,定义了对象应该具有的属性和方法。基于这个类,我们可以创建出多个具体的对象,也就是类的实例。例如,我们可以有一个“汽车”类,然后根据这个类创建出不同颜色、不同型号的具体汽车对象。
(二)类的组成部分
类由类头和类体构成。类头是类的名称,类体包含属性(变量)和方法(函数)。属性用于描述对象的特征,方法则是对象可以执行的操作。
二、创建和使用类
(一)创建Dog类
以下是创建一个简单的Dog类的代码:
classDog:def__init__(self, name, age): self.name = name self.age = agedefsit(self): print(self.name.title() + " is now sitting.")
在这个Dog类中,__init__方法是一个特殊的方法,用于初始化对象的属性。这里我们初始化了name和age两个属性。sit方法是一个普通的类方法,用于描述狗坐下这个动作。
(二)根据类创建实例
创建Dog类的实例非常简单,如下所示:
my_dog = Dog("willie", 6)print("My dog's name is " + my_dog.name.title() + ".")print("My dog is " + str(my_dog.age) + " years old.")my_dog.sit()
我们通过Dog类创建了一个名为my_dog的实例,然后可以访问它的属性和调用它的方法。
三、使用类和实例
(一)Car类
下面是一个Car类的示例代码:
classCar:def__init__(self, make, model, year): self.make = make self.model = model self.year = year self.odometer_reading = 0defget_descriptive_name(self): long_name = str(self.year)+' '+self.make +' '+self.modelreturn long_name.title()defread_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.")
在这个Car类中,我们定义了汽车的品牌、型号、生产年份等属性,还有一个里程表读数的属性并初始化为0。同时定义了获取汽车描述性名称和读取里程表读数的方法。
(二)给属性指定默认值
在上述Car类的__init__方法中,我们已经给odometer_reading属性指定了默认值0。这种方式可以确保当我们创建一个Car实例时,如果没有特别指定里程表读数,它就会有一个默认的初始值。
(三)修改属性的值
- 直接修改属性的值我们可以直接修改Car实例的属性值,如下:
my_car = Car("audi", "a4", 2019)my_car.odometer_reading = 23my_car.read_odometer()
这里我们直接将my_car的odometer_reading属性修改为23。
- 通过方法修改属性的值我们也可以通过定义方法来修改属性值,在Car类中添加如下方法:
defupdate_odometer(self, mileage): self.odometer_reading = mileage
然后可以这样使用:
my_car = Car("audi", "a4", 2019)my_car.update_odometer(45)my_car.read_odometer()
- 通过方法对属性的值进行递增再添加一个方法用于递增里程表读数:
defincrement_odometer(self, miles): self.odometer_reading += miles
使用示例:
my_car = Car("audi", "a4", 2019)my_car.increment_odometer(10)my_car.read_odometer()
四、继承的魅力
(一)子类的方法__init__()
假设我们有一个ElectricCar类继承自Car类,以下是代码示例:
classElectricCar(Car):def__init__(self, make, model, year): super().__init__(make, model, year)
这里的super().__init__方法用于调用父类Car的__init__方法来初始化继承自父类的属性。
(二)给子类定义属性和方法
我们可以给ElectricCar类添加特有的属性和方法,比如添加一个电池容量属性和一个描述电池容量的方法:
classElectricCar(Car):def__init__(self, make, model, year): super().__init__(make, model, year) self.battery_size = 70defdescribe_battery(self): print("This car has a " + str(self.battery_size) + "-kWh battery.")
(三)重写父类的方法
如果我们想改变父类Car中get_descriptive_name方法的行为,我们可以在子类ElectricCar中重写这个方法,如下:
classElectricCar(Car):def__init__(self, make, model, year): super().__init__(make, model, year) self.battery_size = 70defdescribe_battery(self): print("This car has a " + str(self.battery_size) + "-kWh battery.")defget_descriptive_name(self): long_name = str(self.year)+' '+self.make +' '+self.model +' (Electric)'return long_name.title()
(四)将实例用作属性
假设我们有一个类来表示汽车的电池,如下:
classBattery:def__init__(self, battery_size = 70): self.battery_size = battery_sizedefdescribe_battery(self): print("This battery has a capacity of " + str(self.battery_size) + " -kWh.")
然后我们可以在ElectricCar类中将Battery类的实例作为一个属性:
classElectricCar(Car):def__init__(self, make, model, year): super().__init__(make, model, year) self.battery = Battery()
这样我们就可以通过my_electric_car.battery.describe_battery()来调用电池类的方法了,这里my_electric_car是ElectricCar类的一个实例。