1.创建和使用类
#在python中,首字母大写的名称指的是类
class Dog:
#定义方法,该方法是一个特殊方法,每当Dog类创建新实例时,python都会自动运行它
#这个方法的名称中,开头和末尾各有两个下划线,这是一种约定。
#self是必须的形参,指本身实例的引用
def __init__(self,name,age):
#定义属性__init__
self.name=name
self.age=age
#定义普通的方法,有一个形参self
def sit(self):
print(f"{self.name}is now sitting")
def rool_over(self):
print(f"{self.name} rolled over")
#创建一个实例
my_dog=Dog('Willie',6)
print(f"My dog's name is {my_dog.name}.")
print(f"My dog is {my_dog.age} years old.")
my_dog.sit()
my_dog.rool_over()
2.继承
一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类,而新类称为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。
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=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.")
def update_odometer(self,mileage):
if mileage>=self.odometer_reading:
self.odometer_reading=mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self,miles):
self.odometer_reading += miles
#电动汽车, 继承了Car
class ElectricCar(Car):
def __init__(self, make,model,year):
#初始化父类的属性
super().__init__(make,model,year)
my_tesla=ElectricCar('tesla','model s',2019)
print(my_tesla.get_descriptive_name())
3.重写
#电动汽车, 继承了Car
class ElectricCar(Car):
def __init__(self, make,model,year):
#初始化父类的属性
super().__init__(make,model,year)
self.battery_size=75
#重写
def get_descriptive_name(self):
long_name=f"{self.year}{self.make}{self.model}{self.battery_size}"
return long_name.title()
4.将实例用作属性
#电动汽车, 继承了Car
class ElectricCar(Car):
def __init__(self, make,model,year):
#初始化父类的属性
super().__init__(make,model,year)
#将实例用作属性
self.battery=Battery()
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.")
my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
#调用
my_tesla.battery.describe_battery()