从零开始学Python(五)面向对象

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于Python的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.类的定义

二.魔法方法

1.概念

2.常用的魔法方法

①__init__(self, ...)

②__str__(self)

③__repr__(self)

④_len__(self)

⑤_getitem__(self, key)

⑥__setitem__(self, key, value)

⑦__call__(self, ...)

⑧__eq__(self, other)

⑨__lt__(self, other)

三.属性

1.属性是什么?

2.属性的类型

①实例属性(Instance Attribute)

②类属性(Class Attribute)

③静态属性(Static Attribute)

3.实例属性与类属性的区别

四.封装

五.继承

六.多态 


一.类的定义

语法:

class ClassName:

例子:

class Person:

在 Python 中,首字母大写的名称指的是类 这个类定义是可以不带 ( )  括号中是指定的父类型

给Person类定义属性

class Person:
"""人类定义"""
name: str = '小王'
age: int = 18

编写对象&获取对象属性

p = Person()
print(f"name:{p.name},age:{p.age}")

Python中对象的属性是可以动态变化的

p = Person()
p.age = 30
p.gender = '女'
print(f"name:{p.name},age:{p.age},gender:{p.gender}")

在类里面也能够定义方法(这里的方法是指定义在类里面的函数)

def love(self):
pass

每个与类相关的方法调用时都自动传递实参self(谁调用了含有self的方法,那么谁就是那个self)

def love(self):
print(f'{self.name}喜欢你')

当携带多个参数时,其他的参数要放在 self 之后

def eat(self, food: str):
print(f'{self.name}喜欢吃{food}')

二.魔法方法

1.概念

python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两个下划线包围来命名的。 魔法方法可以使Python的自由度变得更高,在面向对象方面表现的更好

2.常用的魔法方法

__init__(self, ...)

作用:对象初始化方法,创建对象时自动调用

用法示例:

class Person:def __init__(self, name, age):self.name = nameself.age = ageperson = Person("Alice", 20)

②__str__(self)

作用:对象的字符串表示方法,用于打印对象时自动调用

用法示例:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"Person(name={self.name}, age={self.age})"person = Person("Alice", 20)
print(person)  # 输出:Person(name=Alice, age=20)

③__repr__(self)

作用:对象的字符串表示方法,用于在交互式环境中显示对象时自动调用

用法示例:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return f"Person(name={self.name}, age={self.age})"person = Person("Alice", 20)
person  # 输出:Person(name=Alice, age=20)

④_len__(self)

作用:对象的长度方法,用于获取对象的长度

用法示例:

class MyList:def __init__(self, data):self.data = datadef __len__(self):return len(self.data)my_list = MyList([1, 2, 3])
print(len(my_list))  # 输出:3

_getitem__(self, key)

作用:对象的长度方法,用于获取对象的长度

用法示例:

class MyList:def __init__(self, data):self.data = datadef __len__(self):return len(self.data)my_list = MyList([1, 2, 3])
print(len(my_list))  # 输出:3

__setitem__(self, key, value)

作用:对象的索引赋值方法,用于通过索引设置对象的元素

用法示例:

class MyList:def __init__(self, data):self.data = datadef __setitem__(self, index, value):self.data[index] = valuemy_list = MyList([1, 2, 3])
my_list[0] = 4
print(my_list.data)  # 输出:[4, 2, 3]

__call__(self, ...)

作用:对象的调用方法,用于将对象作为函数调用

用法示例:

class Adder:def __init__(self, n):self.n = ndef __call__(self, x):return self.n + xadd5 = Adder(5)
print(add5(3))  # 输出:8

__eq__(self, other)

作用:对象的相等比较方法,用于判断两个对象是否相等

用法示例:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __eq__(self, other):return self.name == other.name and self.age == other.ageperson1 = Person("Alice", 20)
person2 = Person("Alice", 20)
print(person1 == person2)  # 输出:True

__lt__(self, other)

作用:对象的小于比较方法,用于判断两个对象的大小关系

用法示例:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __lt__(self, other):return self.age < other.ageperson1 = Person("Alice", 20)
person2 = Person("Bob", 25)
print(person1 < person2)  # 输出:True

三.属性

1.属性是什么?

属性是指对象的特征或状态,可以是对象的数据成员或方法。属性可以通过点号 . 或者 getattr() 函数来访问

2.属性的类型

①实例属性(Instance Attribute)

定义:属于实例对象的属性,每个实例对象都有自己的一份拷贝。实例属性通常在_init_()方法中初始化

示例:

class Person:def __init__(self, name, age):self.name = name  # 实例属性self.age = age    # 实例属性person = Person("Alice", 20)
print(person.name)  # 输出:Alice

②类属性(Class Attribute)

定义:属于类对象的属性,所有实例对象共享同一份拷贝 类属性通常在类定义中初始化

示例:

class Person:# 类属性def __init__(self, name, age):self.name = nameself.age = ageperson1 = Person("Alice", 20)
person2 = Person("Bob", 25)

③静态属性(Static Attribute)

定义:属于类对象的属性,与类方法和静态方法一样,不需要访问实例对象或类对象,可以通过类名直接访问

示例:

class Person:count = 0  # 静态属性def __init__(self, name, age):self.name = nameself.age = agePerson.count += 1@staticmethoddef get_count():return Person.countprint(Person.get_count())  # 输出:0
person1 = Person("Alice", 20)
person2 = Person("Bob", 25)
print(Person.get_count())  # 输出:2

3.实例属性与类属性的区别

python中,实例属性存储在一个字典(dict)中,对于属性的操作,都是在操作这个字典

②类属性同样是存储在字典中,只是这个字典是类的字典 可以通过类名和对象名来调用,但是只能通过类名修改,类属性对于该类对象是共享的 类的属性和方法存在在类的 dict 之中

class Plane(object):category = '飞机'# python中,类属性存储在一个字典(dict)中,对于属性的操作,都是在操作这个字典
print(Plane.__dict__)#{'__module__': '__main__', 'category': '飞机', '__dict__': <attribute '__dict__' of 'Plane' objects>, '__weakref__': <attribute '__weakref__' of 'Plane' objects>, '__doc__': None}
p1, p2 = Plane(), Plane()
print(p1.category, p1.category)#飞机 飞机
Plane.category = '拖拉机'
print(p1.category, p2.category)#拖拉机 拖拉机
print(p1.category, p1.category)#拖拉机 拖拉机
p1.category = '拖拉机'
print(p1.category, p2.category)#拖拉机 拖拉机# python中,实例属性也存储在一个字典(dict)中,对于属性的操作,都是在操作这个字典
p1.name = '车车🚗'
print(p1.__dict__)#{'category': '拖拉机', 'name': '车车🚗'}# 也可以直接操作这个字典
p1.name = '车车🚗'
p1.__dict__['size'] = '大'
print(p1.size)
print(p1.__dict__)#{'category': '拖拉机', 'name': '车车🚗', 'size': '大'}

四.封装

概念:封装是指将数据和行为封装在一个类中,对外部隐藏实现细节,只暴露必要的接口。在Python中,可以使用属性和方法来实现封装

示例:

class Person:def __init__(self, name, age):self.__name = nameself.__age = agedef get_name(self):return self.__namedef set_name(self, name):self.__name = namedef get_age(self):return self.__agedef set_age(self, age):self.__age = ageperson = Person("Tom", 18)
print(person.get_name())  # 输出:Tom
person.set_name("Jerry")
print(person.get_name())  # 输出:Jerry

五.继承

定义:继承是指一个类可以继承另一个类的属性和方法。被继承的类称为父类或基类,继承的类称为子类或派生类。在Python中,可以使用class 子类名(父类名)的语法来实现继承

示例:

class Animal:def __init__(self, name):self.name = namedef eat(self):print(f"{self.name} is eating.")class Dog(Animal):def bark(self):print(f"{self.name} is barking.")dog = Dog("Tommy")
dog.eat()  # 输出:Tommy is eating.
dog.bark()  # 输出:Tommy is barking.

六.多态 

定义:多态是指同一种方法可以在不同的对象上有不同的表现形式。在Python中,多态可以通过方法重写和方法重载来实现

示例:

class Animal:def __init__(self, name):self.name = namedef make_sound(self):passclass Dog(Animal):def make_sound(self):print(f"{self.name} is barking.")class Cat(Animal):def make_sound(self):print(f"{self.name} is meowing.")animals = [Dog("Tommy"), Cat("Kitty")]
for animal in animals:animal.make_sound()

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊  

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

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

相关文章

Javascript进阶内容

1. 作用域 1.1 局部作用域 局部作用域分为函数作用域 和 块级作用域 块级作用域就是用 {} 包起来的&#xff0c;let、const声明的变量就是产生块作用域&#xff0c;var不会&#xff1b;不同代码块之间的变量无法互相访问&#xff0c;里面的变量外部无法访问 1.2 全局作用域…

2024HW --->反序列化漏洞!

对于反序列化&#xff0c;这个漏洞也是常用的&#xff0c;不过涉及到的方面非常非常广&#xff0c;比其他漏洞也难很多 于是本篇文章就分成PHP和JAVA的反序列化来讲讲 1.反序列化 想要理解反序列化&#xff0c;首先就要理解序列化 序列化&#xff1a;把对象转换为字节序列的过…

默克尔(Merkle)树 - 原理及用途

默克尔&#xff08;Merkle&#xff09;树的原理以及用途 引言 在当今数字化时代&#xff0c;确保数据的完整性是至关重要的。默克尔树作为一种高效的数据结构&#xff0c;被广泛应用于网络安全、分布式系统以及加密货币等领域&#xff0c;用于验证大量数据的完整性和一致性 数…

【HTB】 OpenSource

OpenSource 靶机地址&#xff1a;https://app.hackthebox.com/machines/471 信息收集 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV -p- 10.129.212.208 --min-rate5000 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-08 16:01 CST Nmap scan report f…

GPIO口工作原理的超详细解释

一、GPIO基本结构 每个GPIO内部都有这样的一个电路结构&#xff0c;这个结构在本文下面会具体介绍。 这边的电路图稍微提一下&#xff1a; 保护二极管&#xff1a; IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于VDD时&#xff0c;上方的二…

Altair® (澳汰尔)Inspire™ Print3D 打造高效的增材制造设计

Altair &#xff08;澳汰尔&#xff09;Inspire™ Print3D 打造高效的增材制造设计 借助 Inspire Print3D&#xff0c;可加速创新、结构高效的 3D 打印部件的创建、优化和研究&#xff0c;提供快速准确的工具集&#xff0c;可用于实现选择性激光熔融 (SLM) 部件的设计和过程仿…

基于SSM+Jsp+Mysql的快递管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

第十三章 OpenGL ES-RGB、HSV、HSL模型介绍

第十三章 OpenGL ES-RGB、HSV、HSL模型详细介绍 第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标 第二章 OpenGL ES 基础-GLSL语法简单总结 第三章 OpenGL ES 基础-GLSL渲染纹理 第四章 OpenGL ES 基础-位移、缩放、旋转原理 第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵…

模拟memcpy和memmove

memcpy是内存复制函数&#xff0c;原型如下 void *memmove(void *dest, const void *src, size_t count) 从src地址复制count个字节到dest 模拟实现 void *memcpy(void *dest, const void *src, size_t count) {if (dest NULL || src NULL)return NULL;void *ans dest;f…

HackTheBox-Machines--CozyHosting

文章目录 1 端口扫描2 测试思路3 访问web站点4 横向移动5 权限提升 CozyHosting 测试过程 1 端口扫描 nmap -sC -sV 10.129.229.882 测试思路 目标开启了80和22端口&#xff0c;所以出发点从80端口开始。 1.通过在web网站寻找漏洞&#xff0c;获取到用户名和密码&#xff0c;远…

CSS层叠样式表学习(基础选择器)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS&#xff08;2&#xff09;的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 二、CSS基础选择器 2.1 CSS选择器的作用 2.2 选择器分类 2.3 标签选择器 2.…

Swift 异步序列 AsyncStream 新“玩法”以及内存泄漏、死循环那些事儿(上)

概览 异步序列&#xff08;Async Sequence&#xff09;是 Swift 5.5 新并发模型中的一员“悍将”&#xff0c;系统标准库中很多类都做了重构以支持异步序列。我们还可以用 AsyncStream 辅助结构非常方便的创建自己的异步序列。 这里我们就来一起聊聊 AsyncStream 结构&#xf…

win10下使用qemu安装aarch64架构的iso镜像虚拟机

1、win下安装qemu 最新版 可在如下链接进行下载安装 QEMU for Windows – Installers (64 bit) 2、准备aarch64的iso镜像 我这里使用的是 Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso 3、使用如下命令启动虚拟机安装 打开powershell cd C:\Program Files\…

B02、关于垃圾回收器-6.2

1、关于 GC 的分类 1.1、串行 VS 并行 按线程数分&#xff0c;可以分为串行垃圾回收器和并行垃圾回收器。 串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作&#xff0c;此时工作线程被暂停&#xff0c;直至垃圾收集工作结束。 在诸如单CPU处理器或者较小的应…

【Leetcode】2009. 使数组连续的最少操作数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 n u m s nums nums 。每一次操作中&#xff0c;你可以将 n u m s nums nums 中 任意 一个元素替换成 任意 整数。 如果 n u m s nums nums 满足以下条件&…

记一次项目上某系统web渗透测试

第一个信息泄露漏洞 首先在登录页忘记密码处点击查询获取用户进行抓包可以获得用户的token固定id值 第二个用户名枚举漏洞 接下来就是批量遍历出存在数据库用户id值以及用户名&#xff0c;方便后面其他测试使用。 第三弱口令漏洞 这里对于爆破没有限制&#xff0c;因此根据获…

从零开始,教你如何用Java生成微信小程序二维码

Hello大家好我是咕噜铁蛋&#xff01;你是否曾为生成二维码而烦恼过&#xff1f;别担心&#xff0c;今天我就来给你支招&#xff01;&#xff0c;我将分享如何使用Java生成微信小程序二维码的方法&#xff0c;让你轻松应对二维码生成的需求。微信小程序是一种轻量级的应用程序&…

Splunk Attack Range:一款针对Splunk安全的模拟测试环境创建工具

关于Splunk Attack Range Splunk Attack Range是一款针对Splunk安全的模拟测试环境创建工具&#xff0c;该工具完全开源&#xff0c;目前由Splunk威胁研究团队负责维护。 该工具能够帮助广大研究人员构建模拟攻击测试所用的本地或云端环境&#xff0c;并将数据转发至Splunk实例…

nginx到底是怎么工作的

工作流程 用户通过域名发出访问Web服务器的请求&#xff0c;该域名被DNS服务器解析为反向代理服务器的IP地址反向代理服务器接受用户的请求反向代理服务器在本地缓存中查找请求的内容&#xff0c;找到后直接把内容发送给用户如果本地缓存里没有用户所请求的信息内容&#xff0…

【攻防世界】题目名称-文件包含

看到 include()&#xff0c;想到文件包含&#xff0c;用php伪协议。 知识点 看到 include()&#xff0c;require()&#xff0c;include_once()&#xff0c;require_once() &#xff0c;想到文件包含&#xff0c;用php伪协议 ?filenamephp://filter/readconvert.base64-encode/…