目录
1.创建和使用类
1.1根据类创建实例
2.使用类和实例
3.继承
3.1子类的继承方法__init__()
3.2给子类定义属性和方法
3.3重写父类方法
3.4将实例用例作属性
4.导入类
实例化:根据类创建对象
1.创建和使用类
创建Dog类,每个实例都存储名字和年龄,赋予了小狗蹲下(sit())和打滚(roll_over())能力
class Dog: def __init__(self,name,age): """初始化属性name,age""" self.name = name self.age = age def sit(self): """模拟小狗收到命令蹲下""" print(f"{self.name} is now sitting.") def roll_over(self): """模拟小狗收到命令打滚""" print(f"{self.name} rolled over!") | 方法:__init__(),这类的函数称为方法。 创建新实例的时候,python会自动运行它 __init__(self)self一定要有,自动传递 self.name = name:获取与形参name相关联的值,并将其赋值给变量name,然后该变量被关联到当前创建的实例。 |
1.1根据类创建实例
class Dog:…… my_dog = Dog('Dylan',7) print(f"My dog name:{my_dog.name},age:{my_dog.age}.") | My dog name:Dylan,age:7. |
访问属性 | 访问my_dog的name属性:my_dog.name |
调用方法 | my_dog.sit() my_dog.roll_over() | Dylan is now sitting. Dylan rolled over! |
创建多个实例 | my_dog = Dog('Dylan',7) your_dog = Dog('Ann',6) |
2.使用类和实例
创建Car类,存储有关汽车的信息,汇总这些信息
class Car: def __init__(self,make,model,year): self.make = make self.model = model self.year = year def get_d_name(self): long_name = f"{self.year} {self.make} {self.model}" return long_name.title() my_car = Car('audi','a4','2024') #顺序不能变 print(my_car.get_d_name()) | 2024 Audi A4 |
给属性 指定默认值 | class Car: def __init__(self,make,model,year): …… self.odo_reading = 0 def read_odo(self): print(f"miles:{self.odo_reading}") my_car = Car('audi','a4','2024') my_car.read_odo() | 2024 Audi A4 miles:0 |
修改属性值 | 1.直接修改 | my_car.odo_reading = 45 my_car.read_odo() | miles:45 |
2.通过方法修改 | def updata_od(self,mileage): #将里程数设置为指定值 self.odo_reading=mileage my_car.updata_odo(34) my_car.read_odo() | miles:34 |
def updata_od(self,mileage): # 将里程数设置为指定值 # 禁止将里程表读数往回调 if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can't roll back an odometer.") | |
3.通过方法对属性的值进行递增 | def increment_odo(self, miles): # 将里程数增加指定量 self.odometer_reading += miles my_car.updata_odo(34_500) my_car.read_odo()
my_car.increment_odo(100_000) my_car.read_odo() | miles:34500 miles:134500 |
3.继承
如果要编写的类是另一个现实类的特殊版本,可使用继承。
一个类继承另一个类时,将自动获取另一个类的所有属性和方法。
父类:原有类
子类:新类
3.1子类的继承方法__init__()
class FlectricCar(Car): #电动汽车的独特之处 def __init__(self,make,model,year): super().__init__(make,model,year) #初始化父类的属性
my_byd = FlectricCar('byd','plus',2024) print(my_byd.get_d_name()) |
3.2给子类定义属性和方法
一个类继承另一个类后,可以添加区分子类和父类所需的新属性、新方法。
class FlectricCar(Car): #电动汽车的独特之处 def __init__(self,make,model,year): super().__init__(make,model,year) self.battery_size = 75 def describe_battery(self): """打印电瓶容量的消息""" print(f"Car battert:{self.battery_size}-kWh") my_byd.describe_battery() | Car battert:75-kWh |
3.3重写父类方法
只要不符合子类模拟的实物的行为,都可以重写。
如果用电动车的方式调动fill_gas_tank(), 会忽略Car中的方法fill_gas_tank(), 运行右侧代码 | class FlectricCar(Car):…… def fill_gas_tank(self): print(f"Car doesn't need a gas rank.") |
3.4将实例用例作属性
当类属性和方法清单太长的时候,可以将类的一部分提取出来,作为一个独立的类。
将大型类拆分成多个协同工作的小类。
原来 | 拆分后 |
class FlectricCar(Car): #电动汽车的独特之处 def __init__(self,make,model,year): super().__init__(make,model,year) self.battery_size = 75 def describe_battery(self): """打印电瓶容量的消息""" print(f"{self.battery_size}-kWh") my_byd.describe_battery() | class Battery: def __init__(self,battery_size=75): self.battery_size = battery_size def des_battery(self): print(f"{self.battery_size}-kWh") class FlectricCar(Car): def __init__(self,make,model,year): super().__init__(make,model,year) self.battery = Battery()
print(my_byd.get_d_name()) my_byd.battery.des_battery() |
4.导入类
car.py | class Car: …… class ElectricCar(Car):…… |
my_car.py调用car.py | from car import Car |
导入ElectricCar类 | from car import ElectricCar |
导入模块中所有类 | from car import * |
使用别名as | from car import ElectricCar as EC |