Python面向对象编程简介

简介: Python面向对象编程简介

1. 面向对象编程简介

面向对象编程是最有效的代码(不仅限于Python)编写方式之一。在编写代码时,可以把现实中要表达的事物或情景抽象为类(class),并基于这些类来创建对象。


在Python语言中,根据类来创建对象称为实例化,简单来说创建好的类只是一个框架,要实例化之后才能使用。而函数创建好之后在后面可以直接调用,这是Python中类与函数的不同之处。


类中的函数称为方法(Method),Python中函数相关的语法规则基本都适用于类中的方法。但是在方法中有些格式如__xxxx__()的特殊方法,称为魔术方法。例如最常用、最常见的__init__()方法,每当类进行实例化的时候__init__()方法都会自动运行,因此它也被用于类的初始化。


2. Python中面向对象编程实例

下面按顺序讲解一个完整的Python创建类的实操:


2.1 创建一个类
class demo():
    def __init__(self):
        print("this is a demo")
    def byten(self, x):
        self.x = x
        self.y = self.x * 10


这个名为demo的类有两个方法:__init__()byten()


2.2 类的实例化
DEMO = demo()


上文已经说过:创建好的类不能直接使用,必须先实例化。在这个示例中demo类被实例化为DEMO实例。


这里必须要讲解一个形参:self 。上面说过了方法就是类中的函数,那上面demo类中这两个方法显然都不需要形参self,那它的作用是什么?


self的作用是在实例化过程中,把实例DEMO作为实参传入形参self,这样类demo就可以通过self把方法和属性传递给实例DEMO,允许实例DEMO调用类demo的方法和属性。因此形参self在每个方法中都是必要的,而且必须放在首位。


关于self的理解,可以参考我的另一篇文章:Python类(class)中self的理解


上面提到的属性(Attribute)是指以self开头的变量,例如self.x,这些变量(属性)可供类中的所有方法使用。


回到代码上来,在实例化后运行代码就会有输出:


this is a demo


因为上面说明了__init__()方法在实例化时会自动运行。


2.3 输入实参

传入实参的方式和Python中函数一致,这时就不用考虑self了:

DEMO.byten(8)
print(DEMO.y)


输出为:

80


2.4 实例的物理地址

这里为了更好理解实例化过程,我们再进行以下示例:

DEMO1 = demo()
DEMO2 = demo()
DEMO3 = DEMO1
print(DEMO1,'\n',DEMO2,'\n',DEMO3 )


输出为:

<__main__.demo object at 0x0000026096601DF0> 
 <__main__.demo object at 0x0000026096601FA0> 
 <__main__.demo object at 0x0000026096601DF0>


这里代码中虽然都是“=”,但其含义并不同。前面两行是类的实例化过程,创造了DEMO1和DEMO2两个示例,因此其物理地址也不同。而第三行的"="纯粹是给DEMO1对应的内存加了一个名字DEMO3,并没有创造新的地址。

也可以这样理解:类demo就是一个PPT模板,而实例DEMO1和实例DEMO2是要使用该demo模板制作的有实际用途的PPT,因此DEMO1和DEMO2是两份独立的PPT。而DEMO3相当于是DEMO1的快捷方式,它本身并不占内存而是和DEMO1共用一份PPT文件。

3. 完整代码
class demo():
    def __init__(self):
        print("this is a demo")
    def byten(self, x):
        self.x = x
        self.y = self.x * 10
# DEMO = demo()
# DEMO.byten(8)
# print(DEMO.y)
DEMO1 = demo()
DEMO2 = demo()
DEMO3 = DEMO1
print(DEMO1,'\n',DEMO2,'\n',DEMO3 )


相关文章
|
25天前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
108 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
25天前
|
程序员 PHP Python
Python3 简介
【10月更文挑战第8天】Python3 简介。
20 4
|
27天前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
21 2
|
27天前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
20 1
|
30天前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
|
2月前
|
存储 Java 程序员
30天拿下Python之面向对象编程
30天拿下Python之面向对象编程
17 3
|
2月前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
27天前
|
Java Python
Python学习六:面向对象编程(上)
这篇文章是关于Python面向对象编程的基础知识,包括类和对象的概念、实例方法、属性、self关键字以及魔法方法等。
16 0
|
2月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
2月前
|
数据采集 算法 数据处理
Python中的列表推导式:简介与应用
【9月更文挑战第14天】本文旨在介绍Python中一种强大且简洁的构造列表的方法——列表推导式。我们将从基础语法入手,通过实例演示其用法,并探讨在数据处理和算法优化中的应用价值。文章将不包含代码示例,而是专注于概念理解和应用场景的描述,以促进读者对列表推导式的深入认识。
58 3