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

news2024/11/26 2:32:29

🥳🥳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 = name
        self.age = age

person = Person("Alice", 20)

②__str__(self)

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

用法示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __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 = name
        self.age = age
    
    def __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 = data
    
    def __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 = data
    
    def __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 = data
    
    def __setitem__(self, index, value):
        self.data[index] = value

my_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 = n
    
    def __call__(self, x):
        return self.n + x

add5 = Adder(5)
print(add5(3))  # 输出:8

__eq__(self, other)

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

用法示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __eq__(self, other):
        return self.name == other.name and self.age == other.age

person1 = Person("Alice", 20)
person2 = Person("Alice", 20)
print(person1 == person2)  # 输出:True

__lt__(self, other)

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

用法示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __lt__(self, other):
        return self.age < other.age

person1 = 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 = name
        self.age = age
   

person1 = Person("Alice", 20)
person2 = Person("Bob", 25)

③静态属性(Static Attribute)

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

示例:

class Person:
    count = 0  # 静态属性

    def __init__(self, name, age):
        self.name = name
        self.age = age
        Person.count += 1

    @staticmethod
    def get_count():
        return Person.count

print(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 = name
        self.__age = age

    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name

    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age

person = 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 = name

    def 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 = name

    def make_sound(self):
        pass

class 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.coloradmin.cn/o/1582683.html

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

相关文章

RabbitMQ-canal 监听本地数据库 -收不到消息解决方法

一、当我们配置好canal 的配置文件后 发现log 日志不报错&#xff0c;但是消息队列就是监听不到数据库的消息。 二、解决方法 在mysql 的ini 配置文件中加入下列代码 connect_timeout60 # 将默认值&#xff08;如30秒&#xff09;改为60秒 wait_timeout28800 # 将空闲连接超时…

安防视频监控/视频集中存储EasyCVR平台开启鉴权后设备列表不展示是为什么?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、…

阿里同学聊测试开发与测试平台

在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位&#xff0c;即使是做业务测试&#xff0c;那么你的title也是测开。 所以想聊一聊测开的看法&#xff0c;但不代表这是正确的看法&#xff0c;仅供参考。 没来阿里之前我对测开的看法 一直以为专职做自动…

京东重押AI,普通人如何把握AI短视频直播的机遇?

京东重押AI&#xff0c;普通人如何把握AI短视频直播的机遇&#xff1f; 现在普通人没有大厂那样&#xff0c;有雄厚资金财力支撑的&#xff0c;但是又想在AI赛道上把握机遇&#xff0c;那选择就相当重要了&#xff0c;要选择一个真正适合自己的AI项目。 餐赞是一家专注于生活服…

截图识别公式软件都有哪些?分享3个工具!

在学术、教育、科研等领域&#xff0c;公式是不可或缺的一部分。然而&#xff0c;有时我们可能会遇到需要将纸质或屏幕上的公式快速转换为电子文本的情况。这时&#xff0c;一款能够准确识别截图中公式的软件就显得尤为重要。本文将介绍几款可以截图识别公式的软件&#xff0c;…

【数据结构与算法】:快速排序和归并排序的非递归实现

1. 递归实现的缺陷 在以前的文章中我们把快速排序和归并排序的递归实现方式进行了介绍&#xff0c;但是在校招面试和在企业的日常开发过程中&#xff0c;仅掌握递归方法是不够的&#xff0c;因为递归也有它的缺陷。 我们知道在函数调用过程中会在内存中建立栈帧&#xff0c;栈…

【多线程】线程(线程的概念+线程的创建)

文章目录 线程一、线程的概念1.引入线程的目的2.什么叫线程&#xff08;Thread&#xff09;1.线程的特点&#xff1a;2.进程和线程的区别&#xff08;面试题&#xff09;&#xff1a;3.Java的多线程编程 二、创建线程1.继承Thread重写run入口方法&#xff1a;使用jconsolesleep…

文件夹变应用?数据恢复大解密!

在日常使用电脑的过程中&#xff0c;许多用户可能都曾遭遇过这样一个奇怪的现象&#xff1a;原本用来存放文件的普通文件夹&#xff0c;突然变成了应用程序的图标。这种突如其来的变化不仅令人困惑&#xff0c;更可能导致重要数据的丢失或损坏。那么&#xff0c;究竟是什么原因…

最佳UI设计软件推荐:全球顶尖工具一览!

在这个信息化、数字化的时代&#xff0c;我们的生活、工作&#xff0c;甚至娱乐&#xff0c;都被各种各样的网站所包围。随着技术的发展&#xff0c;人们对网页UI设计的要求也越来越高。所以问题是&#xff0c;作为一个想要提高他们的UI设计能力的设计师&#xff0c;你应该如何…

渗透学习第一天:DR4G0N B4LL靶场复现

0x00 环境搭建 攻击机为kali Linux&#xff0c;IP为192.168.71.129 靶机IP地址目前不知道&#xff0c;但是是和kali同网段的 0x01 信息收集 由于不知道目标的IP地址&#xff0c;这里我采用了arp scan对本机的整个网段进行扫描 发现目标IP为192.168.71.130。对目标IP进行端…

高校人事管理系统业务分析

目标用户 大学人事部门&#xff0c;其他部门、院系、个人 解决问题 人事部门按业务划分了很多科室、数据分散、工作流程杂乱、工作效率低。 主要功能模块 人事综合管理平台、个人自助服务平台、人才招聘管理系统、薪酬管理子系统、职称评审子系统、绩效考核子系统组成。

【精选】发布应用到应用商店的基本介绍

摘要 本文旨在介绍如何在各大应用商店发布应用&#xff0c;包括市场选择、准备材料、上架步骤以及常见被拒原因及解决方法。通过详细的步骤和经验分享&#xff0c;帮助开发者顺利将应用推向市场。 引言 随着移动应用市场的不断发展&#xff0c;越来越多的开发者希望将他们的…

44-技术演进(下):软件架构和应用生命周期技术演进之路

应用、系统资源、应用生命周期管理这 3 个维度&#xff0c;构成了我们对云的所有诉求。 我会介绍下应用维度和应用生命周期管理维度的技术演进。 我们就先来看下软件架构的演进之路。 软件架构的演进 软件架构技术演进如下图所示&#xff1a; 单体架构 在单体架构中&#xff…

c++——sort()函数

一、代码和效果 #include<bits/stdc.h> using namespace std;int main() {int a[6]{1,45,2,5,456,7};sort(a,a6);for(int i0; i<6; i){cout<<a[i]<<" "<<endl;}return 0; } 二、sort函数解析 &#xff08;从小到大&#xff09; std::so…

Linux安装MuJoCo各版本及D4RL教程

Linux安装MuJoCo各版本及D4RL教程 文章目录 Linux安装MuJoCo各版本及D4RL教程Linux安装MuJoco150一、下载MuJoco1501.1 文件下载1.2 文件存放位置1.3 环境变量设置 二、安装mujoco-py三、验证mujoco-py安装是否成功 Linux安装MuJoco200一、下载MuJoco2001.1 文件下载1.2 文件存…

【随笔】Git 高级篇 -- 快速定位分支 ^|~(二十三)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

php:实现压缩文件上传、解压、文件更名、压缩包删除功能

效果图 1.上传文件 2.压缩包文件 3.itemno1文件 4.上传到系统路径\ItemNo 更名后的itemno1文件 代码 <form action"<?php echo htmlspecialchars($_SERVER[PHP_SELF], ENT_QUOTES, UTF-8); ?>" method"post" enctype"multipart/form-dat…

Python+Selenium+Unittest 之Unittest3(TestSuite()和TextTestRunner())

目录 1&#xff1a;addTest() 2、addTests() 3&#xff1a;discover() 上一篇说了Unittest的一个基本的执行顺序&#xff0c;那如果我们想要调整用例的执行先后顺序的话&#xff0c;可以用TestSuite()和TextTestRunner()了&#xff0c;可以这么理解&#xff0c;比如一个班级…

TRON x HTX DAO 2024 香港之夜:共建香港元宇宙金融自由港

4月9日&#xff0c;由波场TRON主办&#xff0c;HTX DAO协办的“TRON x HTX DAO 2024 香港之夜”主题活动在香港盛大举行。多位参与HTX DAO生态建设的项目方代表、委员会成员、知名KOL等出席并就HTX DAO发展及加密业态进行演讲。 活动现场&#xff0c;波场TRON创始人孙宇晨通过视…

WordPress LayerSlider插件SQL注入漏洞复现(CVE-2024-2879)

0x01 产品简介 WordPress插件LayerSlider是一款可视化网页内容编辑器、图形设计软件和数字视觉效果应用程序,全球活跃安装量超过 1,000,000 次。 0x02 漏洞概述 WordPress LayerSlider插件版本7.9.11 – 7.10.0中,由于对用户提供的参数转义不充分以及缺少wpdb::prepare(),…