当前位置: 首页 > news >正文

python笔记基础--类(6)

目录

1.创建和使用类

1.1根据类创建实例

2.使用类和实例

3.继承

3.1子类的继承方法__init__()

3.2给子类定义属性和方法

3.3重写父类方法

3.4将实例用例作属性

4.导入类


实例化:根据类创建对象

1.创建和使用类

创建Dog类,每个实例都存储名字和年龄,赋予了小狗蹲下(sit())和打滚(roll_over())能力

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

方法:__init__()这类的函数称为方法。

创建新实例的时候,python会自动运行它

__init__(self)self一定要有,自动传递

self.name = name获取与形参name相关联的值,并将其赋值给变量name,然后该变量被关联到当前创建的实例。

1.1根据类创建实例

class Dog:……
my_dog = Dog('Dylan',7)
print(f"My dog name:{my_dog.name},age:{my_dog.age}.")

My dog name:Dylan,age:7.

访问属性

访问my_dog的name属性:my_dog.name

调用方法

my_dog.sit()
my_dog.roll_over()

Dylan is now sitting.

Dylan rolled over!

创建多个实例

my_dog = Dog('Dylan',7)
your_dog = Dog('Ann',6)

2.使用类和实例

创建Car类,存储有关汽车的信息,汇总这些信息

class Car:
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
    def get_d_name(self):
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()
my_car = Car('audi','a4','2024') #顺序不能变
print(my_car.get_d_name())

2024 Audi A4

给属性

指定默认值

class Car:
    def __init__(self,make,model,year):
        ……
        self.odo_reading = 0
    def read_odo(self):
        print(f"miles:{self.odo_reading}")


my_car = Car('audi','a4','2024')
my_car.read_odo()

2024 Audi A4

miles:0

修改属性值

1.直接修改

my_car.odo_reading = 45
my_car.read_odo()

miles:45

2.通过方法修改

def updata_od(self,mileage):

#将里程数设置为指定值
    self.odo_reading=mileage

 

my_car.updata_odo(34)
my_car.read_odo()

miles:34

def updata_od(self,mileage):
    # 将里程数设置为指定值
    # 禁止将里程表读数往回调
    if mileage >= self.odometer_reading:
        self.odometer_reading = mileage
    else:
        print("You can't roll back an odometer.")

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

def increment_odo(self, miles):
    # 将里程数增加指定量
    self.odometer_reading += miles

my_car.updata_odo(34_500)
my_car.read_odo()

my_car.increment_odo(100_000)
my_car.read_odo()

miles:34500

miles:134500

3.继承

如果要编写的类是另一个现实类的特殊版本,可使用继承。

一个类继承另一个类时,将自动获取另一个类的所有属性和方法。

父类:原有类

子类:新类

3.1子类的继承方法__init__()

class FlectricCar(Car):
    #电动汽车的独特之处
    def __init__(self,make,model,year):
        super().__init__(make,model,year) #初始化父类的属性

my_byd = FlectricCar('byd','plus',2024)
print(my_byd.get_d_name())

3.2给子类定义属性和方法

一个类继承另一个类后,可以添加区分子类和父类所需的新属性、新方法。

class FlectricCar(Car):
    #电动汽车的独特之处
    def __init__(self,make,model,year):
        super().__init__(make,model,year)            

self.battery_size = 75
    def describe_battery(self):
        """打印电瓶容量的消息"""
        print(f"Car battert:{self.battery_size}-kWh")

my_byd.describe_battery()

Car battert:75-kWh

3.3重写父类方法

只要不符合子类模拟的实物的行为,都可以重写。

如果用电动车的方式调动fill_gas_tank(),

会忽略Car中的方法fill_gas_tank()

运行右侧代码

class FlectricCar(Car):……

def fill_gas_tank(self):
         print(f"Car doesn't need a gas rank.")

3.4将实例用例作属性

当类属性和方法清单太长的时候,可以将类的一部分提取出来,作为一个独立的类。

将大型类拆分成多个协同工作的小类。

原来

拆分后

class FlectricCar(Car):
    #电动汽车的独特之处
    def __init__(self,make,model,year):
        super().__init__(make,model,year)            

self.battery_size = 75
    def describe_battery(self):
        """打印电瓶容量的消息"""
        print(f"{self.battery_size}-kWh")

my_byd.describe_battery()

class Battery:
    def __init__(self,battery_size=75):
        self.battery_size = battery_size
    def des_battery(self):
        print(f"{self.battery_size}-kWh")


class FlectricCar(Car):
    def __init__(self,make,model,year):
        super().__init__(make,model,year)

        self.battery = Battery()

print(my_byd.get_d_name())
my_byd.battery.des_battery()

4.导入类

car.py

class Car: ……

class ElectricCar(Car):……

my_car.py调用car.py

from car import Car

导入ElectricCar

from car import ElectricCar

导入模块中所有类

from car import *

使用别名as

from car import ElectricCar as EC

相关文章:

  • 洛谷day3
  • Redis是如何避免“数组+链表”的过长问题
  • React【Day1】
  • 【大模型】在VS Code(Visual Studio Code)上安装中文汉化版插件
  • [激光原理与应用-78]:激光加工(如打标)的各种笔参数与含义解读
  • MCGS学习——用户管理
  • XUbuntu22.04之安装Plantuml(二百二十三)
  • Camera入门基础知识
  • UGUI源码分析与研究2-从底层实现的角度去分析和调优UI的性能问题和疑难杂症
  • 加载三维模型,加载时黑的?
  • 前端视角如何理解“时间复杂度O(n)”
  • 【算法】小强爱数学(迭代公式+数论取模)
  • Unity学习笔记 6.2D换帧动画
  • Java后端八股----JVM篇
  • RuoYi-Vue-Plus(基础知识点jackson、mybatisplus、redis)
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Babel配置的不完全指南
  • If…else
  • JavaScript标准库系列——Math对象和Date对象(二)
  • java取消线程实例
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • PhantomJS 安装
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 从PHP迁移至Golang - 基础篇
  • 读懂package.json -- 依赖管理
  • 关于 Cirru Editor 存储格式
  • 前嗅ForeSpider教程:创建模板
  • 世界上最简单的无等待算法(getAndIncrement)
  • 思维导图—你不知道的JavaScript中卷
  • #{}和${}的区别?
  • #etcd#安装时出错
  • (六)Hibernate的二级缓存
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)项目管理杂谈-我所期望的新人
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ***监测系统的构建(chkrootkit )
  • ***通过什么方式***网吧
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /*在DataTable中更新、删除数据*/
  • @SpringBootApplication 包含的三个注解及其含义
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [100天算法】-不同路径 III(day 73)
  • [20171106]配置客户端连接注意.txt
  • [c++] C++多态(虚函数和虚继承)
  • [Design Pattern] 工厂方法模式
  • [Docker]六.Docker自动部署nodejs以及golang项目