韩顺平 | 零基础快速学Python(12) OOP基础

news/2024/11/28 19:36:08/

面向对象编程-基础

类与对象

类提供了把数据和功能绑定在一起的方法。创建新类时创建了新的对象类型,从而能够创建该类型的新实例/对象
类时抽象的概念,作为数据类型代表一类事物;对象时具体实际的,作为实例代表具体事物;类是对象的模板,对象是类的个体,对应一个实例。
对象在内存中的存在形式:
在这里插入图片描述

属性/成员变量

类中定义的属性(变量),也称为成员变量
属性名 = 值 如果没有值可以赋值None,None是Python的内置常量,通常被用来代表空值的对象

类的定义

class 类名:属性/成员变量...行为/成员方法...

对象的传递机制

在这里插入图片描述

class Person:age = Nonename = Namea = Person()
a.age = 10
a.name = "jack"
b = a 
print(b.name) #jack
b.age = 200
b = None # NoneType
print(a.age) # 200
print(b.age) #报错

对象的布尔值

Python一切皆对象,所有的对象都有一个布尔值,通过内置函数bool()可获取对象的布尔值
False:False、数值0、None、空数据容器

成员方法

类中定义的行为(函数),称为成员方法/方法。

def 方法名(self, 形参列表):方法体
  • Python也支持对象动态的添加方法,注意只是针对该对象添加方法 对象.添加的方法名 = 指定方法名
class Person:age = Nonename = Namedef ok(self):print("ok")def hi:print("hi")p = Person()
p.m1 = hi
print(type(p.m1), type(hi)) #<class 'function'> <class 'function'>
print(type(p.ok)) # <class 'method'> 运行机制一样,只是名称叫法不同

self

self表示当前对象本身,在成员方法内,访问对象的属性/成员变量self.属性/成员变量

  • 当我们通过对象调用方法时,self会隐式传入
  • 定义成员方法时,需要写上self,如果不写,则需要使用@staticmethod标注,否则会报错。
  • @staticmethod将方普通法转换为静态方法。静态方法不会接收隐式第一个参数。静态方法相比普通方法,处额可以通过对象调用,还可以通过类名调用。
class Dog:name = "哈士奇"age = 2def info(self, name):print(f"name信息->{name}")@staticmethoddef ok():print("ok")dog = Dog()
dog.info("德牧")
dog.ok()
Dog.ok()

对象作为传参传递

在这里插入图片描述

作用域

成员变量/属性:类中定义的变量,作用域为整个类
局部变量:一般指成员方法中定义的变量,作用域为当前方法
属性和局部变量可以重名,访问的时候带上self代表访问属性

构造方法

需求:用类创建对象时,即指定属性
在初始化对象时,会自动执行__init__方法,传入的参数会自动传递给__init__方法

class Person:name = Noneage = Nonedef __init__(self, name, age):print(f"__init__方法执行了 {name} {age}")self.name = nameself.age = agep1 = Person("kobe", 20) # __init__方法执行了 kobe 20
  • 构造方法没有返回值
  • Python语言中,一个类只有一个__init__方法,即使写了多个,也只有最后一个生效。Python中实现多个构造方法效果的办法
  • Python可以动态地生成对象属性。
class Person:# 类没定义属性# name = None# age = None																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									def __init__(self, name, age):print(f"__init__方法执行了 {name} {age}")# 此处动态生成属性self.name = nameself.age = agep1 = Person("kobe", 20) # __init__方法执行了 kobe 20

http://www.ppmy.cn/news/1418549.html

相关文章

Web 题记

[极客大挑战 2019]LoveSQL 看到这种就肯定先想到万能密码&#xff0c;试试&#xff0c;得到了用户名和密码 总结了一些万能密码&#xff1a; or 11 oror admin admin-- admin or 44-- admin or 11-- admin888 "or "a""a admin or 22# a having 11# a havin…

C++中的vector容器

一. 基本概念 1. 包含在头文件 #include <vector> 2. 功能: 模拟了一个动态数组 3. 底层实现 首先开辟一定大小的数组 随着元素的增加&#xff0c;如果空间不够之后 自动采取扩容机制 -> 自增长 扩容规则&#xff1a;以原空间大小的 2 倍重新开辟一块空间 将就空…

Spring中基于事件监听驱动 和 线程池的异步任务

文章目录 事件监听驱动 与 异步事件源ApplicationContextAware接口 发布事件事件实体监听事件实现异步注入綫程池 事件驱动机制&#xff0c;与MQ消息队列比较 事件监听驱动 与 异步 事件监听驱动优点&#xff1a;解耦&#xff0c;将 事件和业务进行解耦&#xff0c;通过Asyc注解…

FMix: Enhancing Mixed Sample Data Augmentation 论文阅读

1 Abstract 近年来&#xff0c;混合样本数据增强&#xff08;Mixed Sample Data Augmentation&#xff0c;MSDA&#xff09;受到了越来越多的关注&#xff0c;出现了许多成功的变体&#xff0c;例如MixUp和CutMix。通过研究VAE在原始数据和增强数据上学习到的函数之间的互信息…

带头节点单向非循环链表的基本操作(c语言实现)

头节点 头节点是数据结构中的一个概念&#xff0c;特别是在链表结构中。 它通常被设置为链表的第一个节点之前的一个节点&#xff0c;其数据域一般不存储链表中的实际数据&#xff0c;而它的指针域则存储指向链表中第一个实际节点的指针。 头节点的主要作用如下&#xff1a;…

【HTML】HTML简介

参考资料&#xff1a;https://html.spec.whatwg.org/#introduction 在最初的五年&#xff08;1990-1995&#xff09;中&#xff0c;HTML经历了一系列修订和扩展&#xff0c;最初主要由欧洲核子研究组织&#xff08;CERN&#xff09;托管&#xff0c;随后由互联网工程任务组&am…

Java中的消息队列(如RabbitMQ、Kafka)是如何工作的?

消息队列&#xff08;Message Queue&#xff09;是一种通信方法&#xff0c;其中消息发送者和接收者通过队列进行异步通信。在Java中&#xff0c;有许多消息队列系统&#xff0c;如RabbitMQ、Kafka等&#xff0c;它们各自有自己的特点和适用场景。这里尽量以一种通用的方式解释…

nodejs安装常用命令

安装 Node.js 后&#xff0c;你可以在命令行中使用以下常用命令&#xff1a; node&#xff1a;启动 Node.js 的交互式解释器&#xff0c;可以直接在命令行中执行 JavaScript 代码。 npm install <package-name>&#xff1a;安装一个 Node.js 模块&#xff0c;<packag…