前言

思维导图

9.1 创建和使用类

使用类几乎可以模拟任何东西,下面来编写一个表示小狗的简单类Dog——表示任何小狗。      
大多数小都有名字和年龄,还会蹲下和打滚

9.1.1 创建Dog类

根据约定,在Python中,首字母大写的名称指的是类。 这个类定义中的括号是空的,因为我们要从空白创建这个类。

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):#方法__init__(),包含三个形参。   self自动传入
        """初始化属性name和age"""
        self.name=name
        self.age=age
    def sit(self):
        '''模拟小狗被命令时蹲下 '''
        print(f"{self.name.title()} rolled over!")
        
    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(f"{self.name.title()} rolled over!")

在这里插入图片描述
定义的两个变量都有前缀self。以self为前缀的变量都可供类中的所有方法使用,我们 还可以通过类的任何实例来访问这些变量。self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。self.age = age的作用与此类似
像这样可通过实例访问的变量成为属性

self代表实例本身?!
__init__初始化方法,会自动执行

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

self

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.1.2 根据类创建实例

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):#方法__init__()
        """初始化属性name和age"""
        self.name=name
        self.age=age
    def sit(self):
        '''模拟小狗被命令时蹲下 '''
        print(f"{self.name.title()} rolled over!")
        
    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(f"{self.name.title()} rolled over!");
dog1=Dog('丝竹',12)
print(f"my dog's name is {dog1.name.title()}" )

在这里插入图片描述
1.访问属性
dog1.name 来访问dog1的属性name的值

2.调用方法

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):#方法__init__()
        """初始化属性name和age"""
        self.name=name
        self.age=age
    def sit(self):
        '''模拟小狗被命令时蹲下 '''
        print(f"{self.name.title()} rolled over!")
        
    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(f"{self.name.title()} rolled over!");
dog1=Dog('丝竹',12)
print(f"my dog's name is {dog1.name.title()}" )
dog1.sit()
dog1.roll_over()

要调用方法,可指定实例的名称和要调用的方法,并用句点隔他们。遇 到代码my_dog.sit()时,Python在类Dog中查找法sit()并运行其代码。Python以同样的方式解读代码my_dog.roll_over()。

3.创建多个实例

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):#方法__init__()
        """初始化属性name和age"""
        self.name=name
        self.age=age
    def sit(self):
        '''模拟小狗被命令时蹲下 '''
        print(f"{self.name.title()} rolled over!")
        
    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(f"{self.name.title()} rolled over!");
dog1=Dog('丝竹',12)
dog2=Dog("lucy",14)
print(f"you dog's name is {dog2.name.title()}")

动手试一试
在这里插入图片描述

class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.name=restaurant_name
        self.type=cuisine_type
    def open_restaurant(self):
        print(f"{self.name.title()}now is open")
restaurant1=Restaurant('w',5)
print(f"dsads {restaurant1.name.title()}")
restaurant1.open_restaurant()

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=str(self.year) + ""+ self.make+ ''+ self.model
        return long_name.title()
my_new_car=Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())

在这里插入图片描述
在1处,我们定义了方法__init__。包含三个形参和一个self。方法__init__()接受这些形参的值,并将它们储存在根据这个类创建的实例的属性中。创建新的Car实例时,我们需要指定其制造商,型号和生产年份。

在这里插入图片描述

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=str(self.year) + ""+ self.make+ ''+ self.model
        return long_name.title()
    def read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"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.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=str(self.year) + ""+ self.make+ ''+ self.model
        print(long_name)
    def read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"This car has {str(self.odometer_reading)} miles on it")
my_new_car=Car('audi','a4',2016)
my_new_car.get_descriptive_name()
my_new_car.read_odometer()

一个用了return,一个没用

9.3 修改属性的值

1.直接修改属性的值

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 read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"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.read_odometer()
my_new_car.odometer_reading=23
my_new_car.read_odometer()

在这里插入图片描述

2.通过方法修改属性的值

名为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 read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"This car has {str(self.odometer_reading)} miles on it")
    def update_odometer(self,mileage):
              '''将里程表读数设置为指定的值'''
              self.odometer_reading=mileage
my_new_car=Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(23)
my_new_car.read_odometer()

在这里插入图片描述
在这里插入图片描述

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=str(self.year) + ""+ self.make+ ''+ self.model
        return long_name.title()
    def read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"This car has {str(self.odometer_reading)} miles on it")
    def update_odometer(self,mileage):
              '''将里程表读数设置为指定的值'''
              self.odometer_reading=mileage
    def increment_odometer(self,miles):
        '''将里程表读数增加指定的量'''
        self.odometer_reading +=miles
my_used_car = Car('subaru','outback',2013)
print(my_used_car.get_descriptive_name())

my_used_car.update_odometer(23500)
my_used_car.read_odometer()

my_used_car.increment_odometer(100)
my_used_car.read_odometer()

在这里插入图片描述
在这里插入图片描述

9.3 继承

在这里插入图片描述

9.3.1 子类的方法__init__()

在这里插入图片描述

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 read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"This car has {str(self.odometer_reading)} miles on it")
    def update_odometer(self,mileage):
              '''将里程表读数设置为指定的值'''
              self.odometer_reading=mileage
    def increment_odometer(self,miles):
        '''将里程表读数增加指定的量'''
        self.odometer_reading +=miles
class ElectricCar(Car):
    '''电动汽车的独特之处'''
    
    def __init__(self,make,model,year):
        '''初始化父类的属性'''
        super().__init__(make,model,year)
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())

在这里插入图片描述
在这里插入图片描述
super()函数:帮助python将父类和子类关联起来

9.3.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=str(self.year) + ""+ self.make+ ''+ self.model
        return long_name.title()
    def read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"This car has {str(self.odometer_reading)} miles on it")
    def update_odometer(self,mileage):
              '''将里程表读数设置为指定的值'''
              self.odometer_reading=mileage
    def increment_odometer(self,miles):
        '''将里程表读数增加指定的量'''
        self.odometer_reading +=miles
class ElectricCar(Car):
    '''电动汽车的独特之处'''
    
    def __init__(self,make,model,year):
        '''初始化父类的属性'''
        super().__init__(make,model,year)
        self.battery_size=70
    def describe_battery(self):
        '''打印一条描述电瓶容量的消息'''
        print(f"This car has a str(self.battery_size) - kwh battery")
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()

在这里插入图片描述
在这里插入图片描述

9.3.4 重写父类的方法

在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python就不会考虑这个父类方法,只关注你在子类中定义的相应方法

在这里插入图片描述
在这里插入图片描述
取其精华,去其糟粕!怎么使用?

9.3.5 将实例用作属性

在这里插入图片描述
作用:将类的一部分作为一个独立的类提取出来。你可以将大型类拆分成多个协同工作的小类。

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 read_odometer(self):
        '''打印一条指出汽车里程的消息'''
        print(f"This car has {str(self.odometer_reading)} miles on it")

    def update_odometer(self, mileage):
        '''将里程表读数设置为指定的值'''
        self.odometer_reading = mileage

    def increment_odometer(self, miles):
        '''将里程表读数增加指定的量'''
        self.odometer_reading += miles


class Battery():
    '''一次模拟电动汽车电瓶的简单尝试'''

    def __init__(self, battery_size=70):
        '''初始化电瓶的属性'''
        self.battery_size = battery_size

    def describe_battery(self):
        '''打印一条描述电瓶容量的消息'''
        print("This car has a " + str(self.battery_size) + "-kWh battery.")


class ElectricCar(Car):
    '''电动汽车的独特之处'''

    def __init__(self, make, model, year):
        '''初始化父类的属性'''
        super().__init__(make, model, year)
        self.battery_size = Battery()


my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()

报错了,哪里出问题?

9.3.6 模拟事物

在这里插入图片描述

9.4 导入类

在这里插入图片描述

9.4.1 导入单个类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.4.2 在一个模块中存储多个类

9.4.4 从一个模块中导入多个类

在这里插入图片描述

from car import Car,ElectricCar

9.4.4 导入整个模块

在这里插入图片描述
1.导入整个car模块
2.创建汽车

9.4.5 导入模块中的所有类

from module_name import *

在这里插入图片描述
缺点:

  • 没有明确地指出你使用了模块中的哪些类
  • 引发名称方面的困惑

9.4.6 在一个模块中导入另一个模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.5 python标准库

在这里插入图片描述
#9.7 小结
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值