在Python中面向对象该如何编程

虽然python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在python中进行对象编程。

一.如何定义一个类

  在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。

1.什么是面向对象

面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的。应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元。

立即学习“Python免费学习笔记(深入)”;

2.面向对象与面向过程的区别

我们之前已经介绍过面向过程了,面向过程的核心在‘过程’二字,过程就是解决问题的步骤,面向过程的方法设计程序就像是在设计一条流水线,是一种机械式的思维方式

  优点:复杂的问题简单化,流程化

  缺点:扩展性差

  主要应用场景有:Linux内核,git,以及http服务

面向对象的程序设计,核心是对象,对象就是特征(变量)与技能(函数)的结合体。

  优点:解决了程序扩展性差的问题

  缺点:可控性差,无法预测最终结果

  主要应用场景是需求经常变化的软件,即与用户交互比较频繁的软件

需要注意的是:面向对象的程序设计并不能解决全部问题,只是用来解决扩展性。当然,现在的的互联网软件,扩展性是最重要的

3.对象与类的概念

在python中,一切皆对象,一个对象应该具有自己的属性,也就是特征,还有有自己的功能,即方法

在Python中,特征用变量表示,功能用函数表示,所以对象就是变量与函数的结合体

而从各种各样的对象中抽取出来具有相同特征和相同功能组成的,就是类,所以说类是一系列对象共同特征与功能的结合体

下面让我们来定义一个类,方法与定义一个函数有些类似:

#定义一个中国人的类class Chinese:#共同的特征country='China'#共同的技能def talk(self):print('is talking Chinese')def eat(self):print('is eating Chinese food')

登录后复制

这样我们就定义好了一个类,注意:1.定义类用class关键字

                2.类名一般首字母大写,且冒号前面不需要括号,区别于函数定义
                3.与函数不同,类在定义阶段就会执行类里面的代码

                4.类有两种属性,共同的特征叫数据属性,共同的功能叫函数属性

怎样由这个类产生一个对象呢?实例化:

p1=Chinese()p2=Chinese()

登录后复制

我们可以得出结论了,不管现实世界中怎么样,但是在程序中,确实是先有类,才有的对象

我们已经通过实例化的方式得到两个对象了,但是有一个问题,得到的两个对象,特征和功能都是一样的,这根万物皆对象的理念完全不符啊,应该是每个对象都是不同的,这样的世界才有意思啊

事实上,我们在定义类的时候,忘记了定义 __init__() 这个函数,正确的定义方法应该是这样的:

#定义一个中国人的类class Chinese:#共同的特征country='China'#初始化def __init__(self,name,age):        self.name=name  #每个对象都有自己的名字self.age=age    #每个对象都有自己的年龄#共同的技能def talk(self):print('is talking Chinese')def eat(self):print('is eating Chinese food')#实例化的方式产生一个对象p1=Chinese('zhang',18)

登录后复制

类名加括号就是实例化,实例化就会自动触发__init__ 函数运行,可以用它来为每个对象定制自己的特征

我们在定义__init__函数的时候,括号里有三个参数,但是我们实例化调用的时候却只传了两个值,为什么不报错呢?这是因为self的作用就是:实例化的时候,自动将对象本身传给__init__函数的第一个参数,当然self只是个名字了,egon老师说瞎几把写别人就看不懂了。

注意。这种自动传值的机制只是在实例化的时候才会体现,类除了实例化还有一种作用就是属性引用,方法是类名.属性

#引用类的数据属性print(Chinese.country)  #China#引用类的函数属性# Chinese.talk()#TypeError: talk() missing 1 required positional argument: 'self'print(Chinese.talk) #Chinese.talk('self')    #is talking Chinese#增加属性Chinese.color='yellow'#删除属性del Chinese.color

登录后复制

从上面报错的代码可以看出,属性引用的时候,没有自动传值这回事

我们学过名称空间的概念,定义一个变量,或者定义一个函数都会在内存中开辟一块内存空间,类里面也有定义变量(数据属性),定义函数(函数属性),他们也有名称空间,可以通过.__dict__的方法查看

p1=Chinese('zhang',18)print(Chinese.__dict__)#{'__module__': '__main__', 'country': 'China', '__init__': , 'talk': , # 'eat': , '__# dict__': ,#  '__weakref__': , '__doc__': None}print(p1.__dict__)#{'name': 'zhang', 'age': 18}

登录后复制

通过上面代码显示的结果我们知道了,打印实例化后的对象的名称空间,只显示自己特有的属性,如果想要找到和其他对象共有的属性,就要去类的名称空间里面去找

还有一个问题,对象的名称空间中没有函数属性,当然也是去类里面找,但是不同对象指定的函数,是一个函数吗

p1=Chinese('zhang',18)p2=Chinese('li',19)print(Chinese.talk)#print(p1.talk)     #<bound method Chinese.talk of >print(p2.talk)     #<bound method Chinese.talk of >

登录后复制

可以看到,并不是,他们的内存地址都不一样。而且注意bound method,是绑定方法

对象本身只有数据属性,但是Python的class机制将类的函数也绑定到对象上,称为对象的方法,或者叫绑定方法。绑定方法唯一绑定一个对象,同一个类的方法绑定到不同的对象上,属于不同的方法。我们可以验证一下:

当用到这个函数时:类调用的是函数属性,既然是函数,就是函数名加括号,有参数传参数

而对象用到这个函数时,对象没有函数属性,他是绑定方法,绑定方法怎么用呢,也是直接加括号,但不同的是,绑定方法会默认把对象自己作为第一个参数

class Chinese:    country='China'def __init__(self,name,age):        self.name=name          self.age=age    def talk(self):print('%s is talking Chinese'%self.name)def eat(self):print('is eating Chinese food')p1=Chinese('zhang',18)p2=Chinese('li',19)Chinese.talk(p1)    #zhang is talking Chinesep1.talk()           #zhang is talking Chinese

登录后复制

只要是绑定方法,就会自动传值!其实我们以前就接触过这个,在python3中,类型就是类。数据类型如list,tuple,set,dict这些,实际上也都是类,我们以前用的方法如l1.append(3),还可以这样写:l1.append(l1,3)

未完待续。。。

以上就是在Python中面向对象该如何编程的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2268839.html

(0)
上一篇 2025年2月27日 10:54:36
下一篇 2025年2月24日 15:26:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 电脑编程的基本语言是什么

    计算机编程的基本语言是汇编语言。汇编语言是一种低级语言,使用助记符表示机器指令,效率高但可读性差。高级语言则与机器无关,使用类似自然语言的语法,可读性好且编写难度小。常用的高级语言包括 C 语言、Java、Python、JavaScript…

    2025年2月27日
    200
  • 哪个程序语言最像英语

    最像英语的编程语言是 Python,原因如下:Python 的关键字与英语单词相同。Python 的语法结构类似英语语法,使用缩进风格。Python 代码的单词顺序遵循英语单词顺序。Python 函数的命名方式与英语复合词类似。 最像英语的…

    2025年2月27日
    200
  • Python基础学习需要掌握哪些知识

    1.1python的对象 python的内置对象类型有很多,包括数字,字符串,列表,集合,元组,字典等等,在Python中,一切皆对象 pickle腌制–在Python中,如果有一些对象需要持久性存储,并且不丢失这个对象的类型和…

    编程技术 2025年2月27日
    200
  • 网络开发语言包括哪六个方面

    网络开发语言包含以下六个方面:前端开发(HTML、CSS、JavaScript、TypeScript),后端开发(Python、Java、Node.js、PHP),数据库(MySQL、PostgreSQL、MongoDB、Oracle),框…

    2025年2月27日
    200
  • 现在人们都学什么编程语言

    当下最热门的编程语言是:Python:机器学习、数据科学、Web 开发JavaScript:Web 开发Java:企业应用程序、安卓应用程序、游戏C#:桌面应用程序、Web 服务、游戏C++:操作系统、游戏、嵌入式系统 当下最热门的编程语言…

    2025年2月27日
    200
  • 使用python爬取散文网的文章

    image.png 配置python 2.7 bs4 requests 登录后复制 安装 用pip进行安装 sudo pip install bs4 sudo pip install requests 简要说明一下bs4的使用因为是爬取网页…

    2025年2月27日
    200
  • 那种计算机语言最流行好学

    对于初学者,Python和Java是流行且易学的计算机编程语言。Python因其简洁的语法和丰富的库而著称,而Java因其面向对象特性和跨平台能力而闻名。选择最适合自己需要的语言。 最流行且易学的计算机编程语言 在众多计算机编程语言中,Py…

    2025年2月27日
    200
  • 世界上一共有多少种编程语言

    世界现有约 800-1000 种编程语言,可根据范例分类为:面向过程面向对象函数式逻辑式脚本式根据 TIOBE 指数,最流行的语言包括 Python、C、Java、C++ 等。新语言不断创建,以满足特定需求,选择语言应根据项目需求、语言范例…

    2025年2月27日
    200
  • Python爬取qq音乐的过程实例

    一、前言   qq music上的音乐还是不少的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登录什么的。于是,来了个qqmusic的爬虫。至少我觉得for循环爬虫,最核心的应该就是找到待爬元素所在url吧。下面开始找吧(讲的不…

    2025年2月27日 编程技术
    200
  • 一共有多少种编程语言

    编程语言的数量超过 800 种,主要类别为:1. 通用语言;2. 面向对象语言;3. 脚本语言;4. 函数式语言;5. 逻辑语言;6. 汇编语言。选择合适的编程语言取决于任务的复杂性、性能要求和可用资源。 世界上有多少种编程语言? 编程语言…

    2025年2月27日
    200

发表回复

登录后才能评论