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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper实现分布式锁(Zk分布式锁)

文章目录 概述如何用Zookeeper实现分布式锁Zk分布式锁原理和实现Zookeeper实现分布式锁Java代码 概述 基于zookeeper临时有序节点可以实现的分布式锁。 1、zookeeper天生设计定位就是分布式协调,强一致性。锁的模型健壮、简单易用、适合做分布式锁。 2、如果获取不…

01.重新认识文件(Linux基本概念)

知识引入: 我们经常使用word或者wps写的论文、作业等都是文件,而我们这样对文件的认识也比较片面。我们是否思考过,如果文件里面没有写东西,那么计算机会不会保存呢?答案是,肯定会的。因为我们每次建的空文…

Linux下对线程的认识+生产消费者模型+信号量

线程的概念 线程是进程内部中更加轻量化的一种执行流。线程是CPU调度的基本单位,而进程是承担系统资源的实体。就是说一个进程中可能会有多个线程,而在Linux内核中并没有真正重新的创建线程并重新进行资源分配,因为我们每个线程指向的资源都是…

力扣---最长回文子串---二维动态规划

二维动态规划思路: 首先,刚做完这道题:力扣---最长有效括号---动态规划,栈-CSDN博客,所以会有一种冲动,设立g[i],表示以第i位为结尾的最长回文子串长度,然后再遍历一遍取最大长度即可…

【图解物联网】第8章 物联网与机器人

8.1 由设备到机器人 把我们身边形形色色的“物”都连接到互联网,这就是物联网。物联网中使用的设备随着时间的推移在不断进化,这条进化之路的前方到底有什么呢?这里我们就围绕其中一种形式,即机器人来对讨论一下这个问题。 8.1…

(Node+Express+vue)常量抽取

好久没来更新了,最近在用node整项目。。。 定义一个名为constant.js文件,用来存放项目的常量信息。 // 定义一个常量对象 const obj {// 默认请求成功DEFAULT_SUCCESS: {code: 1001,msg: },// 默认请求失败DEFAULT_ERROR: {code: 1002,msg: 系统错误},…

lin_20240321_calculating_rG4score.R

1.使用上一步的结果来计算RG4 用法和脚本如下: ################################################################################ ################# Function used for the G4Hunter paper ######################### ######################################…

【C语言】指针基础

指针是C语言中的一个重要概念,也是其强大功能的核心之一。理解指针的基础知识对于编写高效、灵活的C语言程序至关重要。本文将介绍指针的基本概念、用法以及一些常见的技巧和注意事项,旨在帮助读者建立起对C语言指针的全面理解,并能够熟练地运…

Python程序设计 类与继承

一. 继承的概念 生活中的继承,一般指的是子女继承父辈的财产。 拓展1:经典类或旧式类 不由任意内置类型派生出的类,称之为经典类。 class 类名:代码...... 拓展2:新式类 # 父类A class A(object):def __init__(self):self.n…

error: ‘mutex’ in namespace ‘boost’ does not name a type 解决办法

在ubuntu下使用make编译的时候出现错误: error: ‘boost::mutex’ has not been declared 以及: error: ‘mutex’ in namespace ‘boost’ does not name a type 等错误,原因是有可能是没有安装boost或者是没有添加boost头文件&#xff…

使用Python的scipy.integrate计算微积分

先上一个二重积分计算,来自2022年考研数学第二题 进行计算前先在终端下载 scipy包 pip install scipy 在脚本中先导入所需要的模块 import scipy.integrate as spi 定义函数f(x, y) ,所得值返回 def f(x, y): return y / (1 x**3)**0.5 定义…

基于springboot+vue的影院订票系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

LeetCode Python - 71. 简化路径

目录 题目描述解法运行结果 题目描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点(.&…

一图理解递归-算法通关村

一图理解递归-算法通关村 递归是我们算法进阶的基础,是必须要掌握的内容,只有掌握了递归才算真的会算法。与递归有关的问题有: 与树和二叉树相关的大部问题二分查找相关的问题快速排序、归并排序相关的问题所有回溯的问题所有动态规划的问题 …

大数据分析-基于Python的网络爬虫及数据处理---智联招聘人才招聘特征分析与挖掘的算法实现

概要 随着科学技术的发展,人类进入了互联网时代,不仅数据量庞大,而且数据种类繁多,Python简单易学, 语法清晰,在数据操作方面有着一定优势,成为了数据采集和可视化领域的热门语言。本论文主要是使用Python来…

golang 使用AES加密

在使用AES加密数据后,将加密结果使用base64.StdEncoding.EncodeToString处理的原因是多方面的: 可读性:AES加密后的数据通常是二进制格式,直接查看或处理这些二进制数据不方便也不直观。Base64编码将这些二进制数据转换为ASCII字符…

Kruskal最小生成树【详细解释+动图图解】【sort中的cmp函数】 【例题:洛谷P3366 【模板】最小生成树】

文章目录 Kruskal算法简介Kruskal算法前置知识sort 中的cmp函数 算法思考样例详细示范与解释kruskal模版code↓ 例题:洛谷P3366 【模板】最小生成树code↓完结撒花QWQ Kruskal算法简介 K r u s k a l Kruskal Kruskal 是基于贪心算法的 M S T MST MST 算法&#xff…

导师坚鹏:厦门火炬高新区数字化转型战略蓝图从规划到落地培训

厦门火炬高新区战略制胜:数字化转型战略蓝图从规划到落地培训 厦门国家火炬高技术产业开发区(简称“厦门国家火炬高新区”)1991年被国务院批准为全国首批国家级高新区,是全国三个以“火炬”冠名的国家高新区之一。目前&#xff0c…

CPU密集的高效访问和数据安全

import asyncio import concurrent.futures import random # 全局变量,用于存储计算结果的列表 list1 [] list2 [] lock asyncio.Lock() # 异步锁 # CPU计算密集型任务 async def cpu_intensive_task(): global list1, list2 # 获取异步锁 async with…

Excel通过下拉菜单,显示不同图片

背景:有的时候需要通过更改下拉菜单来改变对应的 值/ 图片。 如果是数值的话就是我们常常用的Vlookup,这个可以很简单的实现这个功能。(这个如果不知道请自行百度) 但是如果是图片呢?这个就不常见了,那么…