python基础学习—第9章 类

9.1 创建和使用类

1.类名:采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线;
2.实例名、模块名:采用小写格式,并在单词之间加上下划线
3.类定义中没有圆括号
9.1.1 创建类
1.方法__init__():
①类中的函数称为方法,init()是一种特殊的方法,每当根据类创建新实例时,python都会自动运行它;
②必须在方法定义中包含形参self,因为python调用这个方法来创建实例时,将自动传入实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法
③属性:定义的变量都有前缀self,以self为前缀的变量可供类中的所有方法使用,可以通过类的任何实例来访问,像这样可通过实例访问的变量称为属性
eg:

self.age = age

举例创建Dog类

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!")       

9.1.2 根据类创建实例
1.访问属性:使用句点表示法

"""python先找到实例my_dog,再查找与该实例相关联的属性name"""
my_dog.name

2.调用方法
1.根据类创建实例后,就能使用句点表示法来调用类中定义的任何方法了

#根据Dog类创建实例
my_dog = Dog('Lily', 1)
#调用类中的方法
my_dog.sit()
my_dog.roll_over()

3.创建多个实例
1.可根据需求创建任意数量的实例

my_dog = Dog('Lily', 1)
yun_dog = Dog('Bob', 2)
print(f"My dog's name is {my_dog.name}")
my_dog.sit()
print(f"My dog's name is {yun_dog.name}")
yun_dog.sit()

9.2 使用类和实例

9.2.1 给属性指定默认值
1.有些属性无须通过形参来定义,可在方法__init__()中为其指定默认值

class Car:
     """一次模拟汽车的简单尝试"""
     def __init__(self, make, model, year):
         """初始化描述汽车的属性"""
         self.make = make
         self.model = model
         self.year = year
         #创建属性,给属性一个默认值0
         self.odometer_reading = 0
    def get_descriptive_name(self):
         """返回整洁的描述性信息"""
         long_name = f"{self.year} {self.make} {self.model}"
         return long_name
my_new_car = Car('Tesla','hhd',2020)
print(my_new_car.get_descriptive_name()) 

9.2.2 修改属性的值
1.有三种修改属性的方法:直接通过实例修改、通过方法进行设置、通过方法进行递增
①直接修改属性的值

class Car:
     """一次模拟汽车的简单尝试"""
     def __init__(self, make, model, year):
         """初始化描述汽车的属性"""
         self.make = make
         self.model = model
         self.year = year
         #创建属性,给属性一个默认值0
         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} miles on it")
my_new_car = Car('Tesla','hhd',2020)
#直接通过实例修改
my_new_car.odometer_reading = 25
my_new_car.read_odometer()

②通过方法修改属性的值

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
    #新增一个方法来将属性设置为指定的值
    def update_odometer(self):
        """"将里程表读数设置为指定的值"""
        self.odometer_reading = mileage
    def read_odometer(self):
         """打印一条指出汽车里程的消息"""
         print(f"This car has {self.odometer_reading} miles on it")
my_new_car = Car('Tesla','hhd',2020)
#直接将值传递给方法,该25实参直接对应方法定义中的形参mileage
my_new_car.update_odometer(25)
my_new_car.read_odometer()

③通过方法对属性的值进行递增

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
    #新增一个方法来将属性设置为指定的值
    def update_odometer(self):
        """"将里程表读数设置为指定的值"""
        self.odometer_reading = mileage
    def increment_odometer(self):
        """将里程表读数增加指定的量"""
        self.odometer_reading += miles 
    def read_odometer(self):
         """打印一条指出汽车里程的消息"""
         print(f"This car has {self.odometer_reading} miles on it")
my_new_car = Car('Tesla','hhd',2020)
my_new_car.update_odometer(23)
my_new_car.increment_odometer(50)
my_new_car.read_odometer()

9.3 继承

1.继承:一个类继承另一个类时,将自动获得另一个类的属性和方法。原有的类称为父类,也称为超类,而新类称为子类
9.3.1 子类的方法__init__()
1.在既有类的基础上编写新类时,通常要调用父类的方法__init__(),这将初始化在父类__init__()方法中定义的所有属性,从而让子类包含这些属性
2.super()是一个特殊函数,让你能够调用父类的方法

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
    #新增一个方法来将属性设置为指定的值
    def update_odometer(self):
        """"将里程表读数设置为指定的值"""
        self.odometer_reading = mileage
    def increment_odometer(self):
        """将里程表读数增加指定的量"""
        self.odometer_reading += miles 
    def read_odometer(self):
         """打印一条指出汽车里程的消息"""
         print(f"This car has {self.odometer_reading} miles on it")
#创建子类,父类必须包含在当前文件中
class ElecCar(Car):
    """电动汽车的属性"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
my_car = ElecCar('tesla','model s',2020)
print(my_car.get_descriptive_name)

9.3.2 给子类定义属性和方法
1.让一个类继承另一个类后,就可以添加区分子类和父类所需得新属性和新方法

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
    #新增一个方法来将属性设置为指定的值
    def update_odometer(self):
        """"将里程表读数设置为指定的值"""
        self.odometer_reading = mileage
    def increment_odometer(self):
        """将里程表读数增加指定的量"""
        self.odometer_reading += miles 
    def read_odometer(self):
         """打印一条指出汽车里程的消息"""
         print(f"This car has {self.odometer_reading} miles on it")
#创建子类,父类必须包含在当前文件中
class ElecCar(Car):
    """电动汽车的属性"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
        #新增一个属性
        self.battery_size = 75
    #新增方法
    def describe_bettery(self):
        """打印一条描述电瓶容量的信息"""
        print(f"This car has a {self.battery_size}-kwh battery")
my_car = ElecCar('tesla','model s',2020)
print(my_car.get_descriptive_name)
my_car.describe_bettery()

9.3.3 重写父类的方法
1.在子类中定义一个和父类方法同名的方法叫做重写父类的方法

#父
class Animal:
    def __init__(self, age):
        self.age = age
    def eat(self):
        print(f"吃饭")
#子
class Baby(Animal):
    def __init__(self.age):
        super.__init__(self, age)
    #重写eat方法
    def eat(self):
        print("baby只喝牛奶")

9.3.4 将实例用作属性

class Battery:
     """一次模拟电动汽车电瓶的简单尝试"""
     def __init__(self, battery_size=75):
         """初始化电瓶属性"""
         self.battery_size = battery_size
class ElecCar(Car):
    """电动汽车的属性"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
    """将实例用作属性,即将实例父赋给属性, self.battery为属性"""
        self.battery = Battery()

9.4 导入类

9.4.1 导入单个类

from car impport Car

9.4.2 在一个模块中导入多个类

from car import Car, Elec

9.4.4 导入整个模块

import car

9.4.5 导入模块中的所有类

from module import *

9.4.6 使用别名

from ele import Elec as EC

9.5 python标准库

1.函数randint():它将两个整数作为参数,并随机返回一个位于这两个整数之间(包含边界)的整数

from random import randint
ran = randint(1, 6)
print(ran)
#输出结果:3

2.函数choice():它将一个列表或元组作为参数,并随机返回其中的一个列表

from random import choice
players = ['c', 'v', 'g']
first_up = choice(players )
print(first_up )
#输出结果:'c'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值