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 )


相关文章
|
1月前
|
存储 算法 数据挖掘
python列表简介(二)
python列表简介(二)
31 2
|
1月前
|
Python
Python中的面向对象编程与继承
本文将深入探讨Python中面向对象编程的核心概念,重点讨论继承的实现原理以及在实际开发中的应用。通过详细的示例和解释,读者将能够全面理解Python中继承的使用方式和优势,为提高代码的复用性和可维护性提供有效的技术支持。
|
3天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
15天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
20天前
|
Python
Python面向对象编程学习应用案例详解
面向对象编程在Python中通过类定义对象结构和行为。示例:1) 使用`class`关键字定义类,如`class Person`;2) `__init__`方法初始化对象属性,如`self.name`和`self.age`;3) 实例化对象,如`person1 = Person(&quot;张三&quot;, 25)`;4) 访问属性和方法,如`person1.name`;5) 定义类方法,如`def introduce(self)`;6) 调用方法,如`person1.introduce()`;7) 类继承,如`class Student(Person)`;8) 多态,通过继承重写方法实现。
9 1
|
23天前
|
数据采集 网络协议 API
python中其他网络相关的模块和库简介
【4月更文挑战第4天】Python网络编程有多个流行模块和库,如requests提供简洁的HTTP客户端API,支持多种HTTP方法和自动处理复杂功能;Scrapy是高效的网络爬虫框架,适用于数据挖掘和自动化测试;aiohttp基于asyncio的异步HTTP库,用于构建高性能Web应用;Twisted是事件驱动的网络引擎,支持多种协议和异步编程;Flask和Django分别是轻量级和全栈Web框架,方便构建不同规模的Web应用。这些工具使网络编程更简单和高效。
|
1月前
|
数据可视化 数据挖掘 Python
Python中的数据可视化工具Matplotlib简介与实践
在本文中,我们将介绍Python中常用的数据可视化工具Matplotlib,包括其基本概念、常用功能以及实际应用。通过学习Matplotlib,读者可以更好地理解和运用数据可视化技术,提升数据分析与展示的能力。
|
1月前
|
存储 机器学习/深度学习 数据安全/隐私保护
【Python 基础教程 24】全面入门Python面向对象编程:深度探索与实战教程
【Python 基础教程 24】全面入门Python面向对象编程:深度探索与实战教程
79 0
|
1月前
|
数据采集 存储 人工智能
python编程简介(二)
python编程简介(二)
38 1
|
1月前
|
存储 人工智能 运维
python编程简介(一)
python编程简介(一)
93 1