Python基础入门(4)—— 什么是偷懒编程法?是类、对象和继承

news2024/12/29 10:41:17

文章目录

  • 00 | 😃为什么学习类?😃
  • 01 | 😄创建类😄
  • 02 | 😆创建对象😆
  • 03 | 😉访问对象属性和方法😉
  • 04 | 😊构造函数😊
  • 05 | 😋继承😋
  • 06 | 🤗习题🤗
  • 07 | 😙问题😙

If a thing is worth doing it is worth doing well.
如果事情值得做,就值得做好。

00 | 😃为什么学习类?😃

Python中的所有数据都可以视为对象,并且每个对象都属于一个特定的类别,这些类别定义了对象的属性和方法。通过使用类,您可以创建自己的对象,并在这些对象上执行操作。类也提供了一种有效的封装数据和行为的方式,从而使代码更加模块化、可重用和易于维护。此外,面向对象编程也是大多数现代编程语言所共有的基本概念之一,因此学习类将帮助更好地理解其他编程语言。

在Python中,类和对象是重要的编程概念。类是一个模板,它定义了一组属性或方法,而对象则是该类的实例。以下是关于Python类和对象的详细讲解:

01 | 😄创建类😄

要创建一个类,需要使用class关键字,后跟类名和冒号。在类内部,可以定义属性和方法。示例:

class MyClass:
    x = 5
    
    def my_method(self):
        print("Hello, World!")

上面的代码将定义一个名为MyClass的类。它有一个属性x等于5,以及一个名为my_method的方法,它将打印“Hello, World!”。

02 | 😆创建对象😆

要创建类的对象,只需调用类并将返回的对象分配给变量。例如,以下代码将创建一个名为obj的MyClass对象:

obj = MyClass()

03 | 😉访问对象属性和方法😉

要访问对象的属性和方法,需要使用点表示法。例如,在上面的示例中,要访问MyClass的属性x,执行以下操作:

print(obj.x)

要调用对象的方法,执行以下操作:

obj.my_method()

04 | 😊构造函数😊

当创建新的对象时,Python将自动调用名为__init __()的构造函数。可以在构造函数中初始化对象的属性。示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Alice", 20)

print(person.name) # 输出“Alice”
print(person.age) # 输出“20”

上述代码将定义一个名为Person的类,并在构造函数中初始化对象的两个属性:name和age。然后,它将创建一个具有名称“Alice”和年龄20的Person对象,并输出其名称和年龄。

05 | 😋继承😋

为什么学习继承?当然是可以偷懒啊(不是)

继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码(偷懒)。

在Python中,可以使用继承从现有类派生新类。使用继承,可以重用现有类的代码,并添加新功能以满足特定的需求。示例:

class Animal:
    def __init__(self, name):
        self.name = name
        
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "Woof!"

class Cat(Animal):
    def sound(self):
        return "Meow!"

dog = Dog("Rover")
cat = Cat("Fluffy")

print(dog.sound()) # 输出“Woof!”
print(cat.sound()) # 输出“Meow!”

上面的代码将定义一个名为Animal的基本类,该类包含属性name和方法sound。然后,它将定义两个类Dog和Cat,这些类将从Animal类继承。它们还将覆盖sound()方法以提供特定于狗和猫的声音。最后,它将创建一个名为Rover的狗对象和一个名为Fluffy的猫对象,并调用他们各自的sound()方法。

总之,在Python中,类和对象是一种重要的编程概念。通过学习如何创建类、创建对象、访问对象属性和方法、编写构造函数以及使用继承,能更好地设计和编写面向对象的Python程序。

06 | 🤗习题🤗

  • 定义一个动物大类,包含一些共同属性和方法,再定义两个猫类和狗类,使它们具有各自的方法

    class Animal(object): # 定义父类animal
    	def __init__(self,name,sound): # 初始化属性 name sound
        	self.name = name
        	self.sound = sound
        	self.talk() # 一实例化即调用talk()方法
    
    	def talk(self): # 定义父类方法,用于打招呼
        	print("I am %s,%s" % (self.name,self.sound))
    
    class Dog(Animal): # 继承父类animal
    	def jump(self): # 增加子类新方法
        	print("I eat gouliang!")
    
    class Cat(Animal): # 继承父类animal
    	def sleep(self): # 增加子类新方法
        	print("I eat maoliang")
    
    
    catt = Cat("cat","miao~miao~miao") # 实例化cat类,得到catt对象
    catt.sleep() # 调用对象方法
    
    dogg = Dog("dog","wang~wang~wang")
    dogg.jump()
    

    输出结果如下:

    在这里插入图片描述

  • 定义一个点(Point)类和直线(Line)类,使用getLen的方法可以获得直线的长度

    • Python中计算开根号可以使用math模块中的sqrt函数

    • 直线需有两点构成,因此初始化时需要有两个点(Point)对象作为参数。

    import math
    
    class Point():
        def __init__(self,x=0,y=0):
        	self.x = x
        	self.y = y
    
    	def getX(self):
        	return self.x
    
    	def getY(self):
        	return self.y
    
    class Line():
    	def __init__(self,p1,p2):
        	self.x = p1.getX() - p2.getX()
        	self.y = p1.getY() - p2.getY()
        	self.len = math.sqrt(self.x*self.x + self.y*self.y)
    
    	def getLen(self):
        	return self.len
    
    p1 = Point(1,1)
    p2 = Point(4,5)
    line = Line(p1,p2)
    print(line.getLen())
    

    结果输出为:5

    在这里插入图片描述

07 | 😙问题😙

  1. 能否重写 __init__函数的返回值?会有什么问题?

    class Animal(object):
    	def __init__(self,name,sound):
      	return 'This is animal'
    

    以上重写 __init__函数的方法是不允许的。因为**__init__特殊方法不应当返回除了None以外的任何对象**

    可以看下执行结果如下

在这里插入图片描述

  1. 习题中的第一题,如果那只狗不会叫的话,怎么屏蔽父类中的talk()方法?

    覆盖父类方法,例如将函数体内容写pass

    class Animal(object): # 定义父类animal
    	def __init__(self,name,sound): # 初始化属性 name sound
        	self.name = name
        	self.sound = sound
        	self.talk() # 一实例化即调用talk()方法
    
    	def talk(self): # 定义父类方法,用于打招呼
        	print("I am %s,%s" % (self.name,self.sound))
    
    class Dog(Animal): # 继承父类animal
    	def jump(self): # 增加子类新方法
        	print("I eat gouliang!")
    
    class Cat(Animal): # 继承父类animal
    	def talk(self):
        	pass
    	def sleep(self): # 增加子类新方法
        	print("I eat maoliang")
    
    catt = Cat("cat","miao~miao~miao") # 实例化cat类,得到catt对象
    catt.sleep() # 调用对象方法
    
    dogg = Dog("dog","wang~wang~wang")
    dogg.jump()
    

在这里插入图片描述

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

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

相关文章

Shell编程之数组

目录 一、数组的基本概念 二、定义数组的方法 方法一: ​编辑 方法二: 方法三: ​编辑 方法四: 三、 数组的输出,删除和长度统计 1)数组元素的输出 2)数组全部元素输出 3&#xff0…

一种用于提高无线传感器网络寿命的改进LEACH协议(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 无线传感器网络具有网络灵活性强、网络规模可变等优点,广泛应用于军事、工业等领域。无线传感器网络的基本网络路由…

Mybatis一级缓存详解

目录 一级缓存 一级缓存的组织 一级缓存的生命周期 一级缓存的工作流程 Cache接口的设计以及CacheKey的定义 一级缓存的性能分析 一级缓存与Spring 事务一级缓存存在的弊端 官方文档分析 Spring通过Mybatis调用数据库的过程 一级缓存 对于会话(Session&am…

Nacos-01-Nacos基本介绍

背景 ​ 服务发现是⼀个古老的话题,当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有⼀个独立的 IP 地址,那么服务发现基本上都是通过某种方式获取到服务所部署的 IP 地址。DNS 协议是最早将⼀个网络名称翻译…

让AI帮忙写个需求,AI写出来了,只是有bug而已

需求 使用原生JS和iframe&#xff0c;嵌入网页进行轮播&#xff0c;需要可以点击暂停、上一页、下一页。 AI的答案 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>轮播图</title><style>* {margin: 0;padd…

看板项目管理:如何可视化工作以提高生产力?

如果你一直关心优化工作流程&#xff0c;提高你或团队的生产力&#xff0c;你肯定听说过看板这个词。 看板是一种工作管理方法&#xff0c;可以将整个工作流程以及构成工作流程的每个单独活动可视化&#xff0c;从而可以识别瓶颈和优化整体流程。 在这方面&#xff0c;看板的…

Python基础(二)

目录 一、类型转换 1、为什么需要数据类型转换 2、数据类型转化的函数 3、str()函数类型转换使用 4、int()函数类型转换使用 4.1int()不能将str类型数据转换成int 4.2int()将bool类型转换成int 4.3int()将float转换成int 5、Float()函数类型转换使用 5.1Float()函数不…

ros imu可视化(ubantu)

可以用下面的链接安装ros 安装ros 在home下建立workspace&#xff0c;添加环境变量 export $ROS_PACKAGE_PATHROS_PACKAGE_PATH:/home/workspace在workspace下建立src文件夹&#xff0c;将fdilink_ahrs_ROS1解压在src目录下面 在workspace下运行以下命令&#xff1a; catkin_…

【牛客面试必刷TOP101】有效括号序列、滑动窗口的最大值

BM44 有效括号序列 点击进入该题 描述&#xff1a; 给出一个仅包含字符’(‘,’)‘,’{‘,’}‘,’[‘和’],的字符串&#xff0c;判断给出的字符串是否是合法的括号序列。 括号必须以正确的顺序关闭&#xff0c;"()“和”()[]{}“都是合法的括号序列&#xff0c;但”(]“…

(七)如何实现即时通信系统中用户的文字聊天功能?

文章目录 一、引言二、实现用户文字功能2.1 使用QTextEdit控件实现用户输入文字消息2.2 实现文字消息的发送和接收2.3 实现文字消息的展示和管理 三、解码接收到的文字消息3.1 接收数据并解码3.2 在客户端展示文字消息3.3 客户端关键代码展示3.4 服务端关键代码展示 四、效果展…

干货 | 如何做一个简单的访谈研究?

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 心理学中研究中&#xff0c;大家常用的研究方法大多是实验法、问卷调查法等&#xff0c;这些均是定量研究。 其实&#xff0c;作为质性研究中常用的访谈法&#xff0c;可对个体的内心想法进…

【操作系统】从操作系统底层出发,成为更好的程序员

冯老爷子的模型 首先&#xff0c;我们从一个问题开始(&#xffe3;∇&#xffe3;)/ 为什么需要程序员&#xff1f; 早期的计算机程序是硬件化的&#xff0c;即使用各种门电路组装出一个固定的电路板&#xff0c;这个电路板只能用于执行某个特定的程序&#xff0c;如果需要修…

学生电费管理系统

随着现代化的发展和科技的进步&#xff0c;各种智能化的系统应运而生。其中&#xff0c;学生电费管理系统是一个非常实用的系统&#xff0c;它可以帮助学校管理电费&#xff0c;提高学生的电费管理意识&#xff0c;减少学校的电费支出。本文将着重介绍该系统的作用、特点以及优…

【hive】基于Qt5和libuv udp 的lan chat

作者已经不更新了,但是很棒 在线用户列表: 聊天窗口 主程序 单独的网络线程: network_thread data管理关联网络管理的 程序update升级更新 和消息收到 即可

【Java】面试常问知识点(数据库相关知识)

Redis Redis数据结构&#xff0c;跳表如何实现&#xff1f;跳表添加层级的时机&#xff1f; 布隆过滤器的底层原理 Redis数据结构 有5中数据结构&#xff0c;string&#xff08;字符串类型&#xff09;、list&#xff08;列表类型&#xff09;、hash&#xff08;哈希表类型…

Ubuntu 20.04 系统配置 OpenVINO 2022.3 环境

由于 OpenVINO 2021 版本在调用 IECore 时会出现 Segmentation fault 的问题&#xff0c;因此需要将其升级为 2022 版本的。 1. 卸载原来版本的 OpenVINO 进入OpenVINO的卸载目录&#xff0c;通常在 /opt/intel 文件夹下&#xff0c; cd /opt/intel/openvino_2021/openvino_…

SOA协议DDS和Some/IP对比

SOME/IP 和 DDS 均已被纳入AUTOSAR AP的平台标准中。 SOME/IP 和 DDS是在不同的应用场景和不同的需求下诞生的技术&#xff0c;所以它们之间注定有很大的区别。 SOME/IP SOME/IP的全称为&#xff1a;Scalable service-Oriented MiddlewarE over IP&#xff0c;是一种面向服务…

Codeforces Round 871 (Div. 4)【A、B、C、D、E、F、G、H】

文章目录 A. Love Story(模拟)B. Blank Space(模拟)C. Mr. Perfectly Fine&#xff08;模拟&#xff09;D. Gold Rush(小思维)E. The Lakes(DFS)F. Forever Winter(简单的图)G. Hits Different&#xff08;二维前缀和&#xff09;H. Dont Blame Me(状态压缩dp) 传送门 A. Love …

视频文本检索之CLIP4Clip

论文&#xff1a;CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip Retrieval GitHub&#xff1a;https://github.com/ArrowLuo/CLIP4Clip 论文基于图片-文本检索模型CLIP (Contrastive Language-Image Pretraining)提出了视频-文本检索模型CLIP4Clip (CLIP …

【开源硬件篇】STM32F103C8T6主控板

STM32F103C8T6主控板 文章目录 STM32F103C8T6主控板设计目标一、STM32F103C8T6核心板外围引脚电路1.1 原理图设计1.2 PCB设计用例 二、ISP一键下载电路设计2.1 原理图设计2.2 原理分析2.2.1 CH340电路选择2.2.2 ISP一键下载原理 2.3 PCB设计示例 三、串口通信电路3.1 原理图设计…