# 9.1 创建和使用类
## 9.1.1 创建Dog类
class Dog():
"""一次模拟小狗的简单尝试"""
# self自动传递 属性函数,供全部方法使用
def __init__(self,name,age): #self 创建Dog实例,自动传入实参self,是一个指向实例本身的引用,创建的实例就可以访问类中的属性和方法
"""初始化属性name,age"""
self.name = name #以self为前缀的变量可以供类中的所有方法使用,可以通过类的任何实例来访问
self.age = age #可以通过实例访问的变量叫做 属性
def sit(self):
'''模拟小狗受到命令时蹲下'''
print(f"{self.name} is now sitting.")
def roll_over(self):
'''模拟小狗受到命令时打滚'''
print(f"{self.name} rolled over!")
# 创建实例
my_dog = Dog('wz',6) #实例好对象,默认首先调用__init__方法,设置好属性,可以访问属性
print(f"My dog's name is {my_dog.name}")
print(f"My dog is {my_dog.age} years old.")
## 9.1.2 根据类创建实例
## 1,访问属性
my_dog.name
my_dog.age
## 2,调用方法
#使用方法· 实例化对象.方法
my_dog.sit()
my_dog.roll_over()
## 3,创建多个实例
my_dog = Dog('wz',6)
your_dog = Dog('2d',78)
print(f"your dog's name is {your_dog.name}")
print(f"your dog is {your_dog.age} years old.")
# 9.2 使用类和实例
# 9.2.1 Car类
class Car:
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车属性'''
self.make =make
self.model =model
self.year =year
def get_descriptive_name(self):
'''返回整洁的描述性信息'''
long_name = f"{self.year} {self.make} {self.model}"
return long_name
my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())
# 9.2.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
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
# 9.2.3 修改属性的值
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
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23 #找出变量进行修改
my_new_car.read_odometer()
## 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
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
def update_odometer(self,mileage): #通过方法修改属性
"""将里程表读书设置为指定值"""
self.odometer_reading = mileage
my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23 #找出变量进行修改
my_new_car.read_odometer()
my_new_car.update_odometer(23)
my_new_car.read_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 = f"{self.year} {self.make} {self.model}"
return long_name
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
def update_odometer(self,mileage):
"""将里程表读书设置为指定值"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back!")
self.odometer_reading = mileage
my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(-1)
my_new_car.odometer_reading()
## 3,通过方法对属性值进行递增
假设我们购买了一辆二手车,且从购买到登记期间增加了100英里的里程
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
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
def update_odometer(self,mileage):
"""将里程表读书设置为指定值"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back!")
self.odometer_reading = mileage
def increment_odometer(self,miles): #方法实现属性的增减
self.odometer_reading += miles
my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(23500)
my_new_car.read_odometer()
my_new_car.increment_odometer(100)
my_new_car.read_odometer()
# 9.3 继承
1,继承父类
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
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
def update_odometer(self,mileage):
"""将里程表读书设置为指定值"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back!")
self.odometer_reading = mileage
def increment_odometer(self,miles): #方法实现属性的增减
self.odometer_reading += miles
class ElectricCar(Car): #继承Car类
"""电动汽车"""
def __init__(self,make,model,year):
'''初始化父类的属性'''
super().__init__(make,model,year) #在。。。方法前面使用super(). super,特殊函数,调用父类方法, 超类
#
my_tesla = ElectricCar('wd','c3',35)
print(my_tesla.get_descriptive_name())
## 9.3.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
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
def update_odometer(self,mileage):
"""将里程表读书设置为指定值"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back!")
self.odometer_reading = mileage
def increment_odometer(self,miles): #方法实现属性的增减
self.odometer_reading += miles
class ElectricCar(Car): #继承Car类
"""电动汽车"""
def __init__(self,make,model,year):
'''初始化父类的属性'''
super().__init__(make,model,year) #在。。。方法前面使用super(). super,特殊函数,调用父类方法, 超类
#新增一个属性,设置初始值
self.battery_size = 74
#新增方法
def describe_battery(self):
'''打印一条描述电瓶容量的消息'''
print(f"This car has a {self.battery_size}-kwh battery.")
#实例化类
my_tesla = ElectricCar('wd','c3',35)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
## 9.3.3 重写父类的方法
子类重写方法,子类的方法会忽略父类其的方法
## 9.3.4 将实例用作属性
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
def read_odometer(self):
'''打印一条指出汽车里程的消息'''
print(f"This car has {self.odometer_reading} mile on it.")
def update_odometer(self,mileage):
"""将里程表读书设置为指定值"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back!")
self.odometer_reading = mileage
def increment_odometer(self,miles): #方法实现属性的增减
self.odometer_reading += miles
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")
class ElectricCar(Car): #继承Car类
"""电动汽车"""
def __init__(self,make,model,year):
'''初始化父类的属性'''
super().__init__(make,model,year) #在。。。方法前面使用super(). super,特殊函数,调用父类方法, 超类
#定义新类,没有继承任何类
self.battery = Battery() #属性是实例化的一个类
#实例化类
my_tesla = ElectricCar('wd','c3',35)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery() #battery属性的des方法 两个.
python基础:八,类
最新推荐文章于 2024-10-09 19:00:53 发布