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'