首页 > 编程语言 >Python基础分享之面向对象的基本概念

Python基础分享之面向对象的基本概念

时间:2023-09-19 23:34:57浏览次数:41  
标签:summer object 定义 Python move 基本概念 面向对象 Bird 属性

Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。

面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。了解OOP是进一步学习Python的关键。

下面是对面向对象的一种理解,基于分类。

相近对象,归为类

在人类认知中,会根据属性相近把东西归类,并且给类别命名。比如说,鸟类的共同属性是有羽毛,通过产卵生育后代。任何一只特别的鸟都在鸟类的原型基础上的。

面向对象就是模拟了以上人类认知过程。在Python语言,为了听起来酷,我们把上面说的“东西”称为对象(object)。

先定义鸟类

class Bird(object):
    have_feather = True
    way_of_reproduction  = 'egg'

我们定义了一个类别(class),就是鸟(Bird)。在隶属于这个类比的语句块中,我们定义了两个变量,一个是有羽毛(have_feather),一个是生殖方式(way_of_reproduction),这两个变量对应我们刚才说的属性(attribute)。我们暂时先不说明括号以及其中的内容,记为问题1。

假设我养了一只小鸡,叫summer。它是个对象,且属于鸟类。使用前面定义的类:

summer = Bird()
print summer.way_of_reproduction

通过第一句创建对象,并说明summer是类别鸟中的一个对象,summer就有了鸟的类属性,对属性的引用是通过 对象.属性(object.attribute) 的形式实现的。


动作

日常认知中,我们在通过属性识别类别的时候,有时根据这个东西能做什么事情来区分类别。比如说,鸟会移动。这样,鸟就和房屋的类别区分开了。这些动作会带来一定的结果,比如移动导致位置的变化。

这样的一些“行为”属性为方法(method)。Python中通过在类的内部定义函数,来说明方法。

class Bird(object):
    have_feather = True
    way_of_reproduction = 'egg'
    def move(self, dx, dy):
        position = [0,0]
        position[0] = position[0] + dx
        position[1] = position[1] + dy
        return position

summer = Bird()
print 'after move:',summer.move(5,8)

我们重新定义了鸟这个类别。鸟新增一个方法属性,就是表示移动的方法move。(我承认这个方法很傻,你可以在看过下一讲之后定义个有趣些的方法)

(它的参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self,无论是否用到。有关self的内容会在下一讲展开)

另外两个参数,dx, dy表示在x、y两个方向移动的距离。move方法会最终返回运算过的position。

在最后调用move方法的时候,我们只传递了dx和dy两个参数,不需要传递self参数(因为self只是为了内部使用)。

我的summer可以跑了。


子类

类别本身还可以进一步细分成子类

比如说,鸟类可以进一步分成鸡,大雁,黄鹂。

在OOP中,我们通过继承(inheritance)来表达上述概念。

class Chicken(Bird):
    way_of_move = 'walk'
    possible_in_KFC = True

class Oriole(Bird):
    way_of_move = 'fly'
    possible_in_KFC = False

summer = Chicken()
print summer.have_feather
print summer.move(5,8)

新定义的鸡(Chicken)类的,增加了两个属性:移动方式(way_of_move),可能在KFC找到(possible_in_KFC)


在类定义时,括号里为了Bird。这说明,Chicken是属于鸟类(Bird)的一个子类,即Chicken继承自Bird。自然而然,Bird就是Chicken的父类。Chicken将享有Bird的所有属性。尽管我只声明了summer是鸡类,它通过继承享有了父类的属性(无论是变量属性have_feather还是方法属性move)

新定义的黄鹂(Oriole)类,同样继承自鸟类。在创建一个黄鹂对象时,该对象自动拥有鸟类的属性。

通过继承制度,我们可以减少程序中的重复信息和重复语句。如果我们分别定义两个类,而不继承自鸟类,就必须把鸟类的属性分别输入到鸡类和黄鹂类的定义中。整个过程会变得繁琐,因此,面向对象提高了程序的可重复使用性。

(回到问题1, 括号中的object,当括号中为object时,说明这个类没有父类)

将各种各样的东西分类,从而了解世界,从人类祖先开始,我们就在练习了这个认知过程,面向对象是符合人类思维习惯的。所谓面向过程,也就是执行完一个语句再执行下一个,更多的是机器思维。通过面向对象的编程,我们可以更方便的表达思维中的复杂想法。


小结

将东西根据属性归类 ( 将object归为class )

方法是一种属性,表示动作

用继承来说明父类-子类关系。子类自动具有父类的所有属性。

self代表了根据类定义而创建的对象。

建立对一个对象: 对象名 = 类名()

引用对象的属性: object.attribute

Python基础分享之面向对象的基本概念_面向对象

标签:summer,object,定义,Python,move,基本概念,面向对象,Bird,属性
From: https://blog.51cto.com/u_15974582/7530192

相关文章

  • python06
    1.循环语句while循环for循环while条件: ... ... ...1.2综合案例print("欢迎登陆修仙系统")flag=Truewhileflag:user=input("请输入账号:")password=input("请输入密码:")ifuser=="zyj"andpassword=="123":......
  • 【python技巧】文本处理-re库字符匹配
    (【python技巧】文本处理-re库字符匹配)我们读取文件内容,肯定不是单纯为了输出或者重新写入,对于文本我们一定有一些查找、定位的需求。在Python中,还有一个专门用于文本处理的库,那就是re库。下面我会介绍re库涉及的正则表达式的基本知识。参考课程1.正则表达式正则表达式是用......
  • 【python技巧】文本处理-re库字符匹配
    目录1.正则表达式1.1测试工具1.2限定符1.3字符集1.4运算符1.5元字符1.6懒惰匹配和贪婪匹配我们读取文件内容,肯定不是单纯为了输出或者重新写入,对于文本我们一定有一些查找、定位的需求。在Python中,还有一个专门用于文本处理的库,那就是re库。下面我会介绍re库涉及的正则......
  • Python 爬虫使用 Selenium 如何在 WebElement 获得属性
    首先,我们需要初始化驱动和指定使用特定的流量器。 代码如下: fromseleniumimportwebdriverwd=webdriver.Firefox()上面的代码可以简单的理解为启动一个Firefox的实例。使用css选择器可以把程序读取的HTML理解为一个Doc。我们需要在Doc中选择我们的元素,这个叫做选择......
  • Python 如何把 String 转换为 Json 对象
    在我们对JSON进行处理的时候,大概率我们会需要把字符串转换为JSON对象后才能进行处理。Python贴心的使用json.loads(employee_string)就可以了。首先需要做的就是导入JSON库。#includejsonlibraryimportjson对现代程序员来说,JSON数据结构基本上是非常常见的数据结构了,几......
  • Python-day12
    复习:1、python异常处理机制try:a=int(input('a='))b=int(input('b='))c=a/bprint(c)exceptZeroDivisionError:print('除数不能为0')exceptValueError:print('输入应该为整数')finally:print('计算结束')tr......
  • Python 如何把 String 转换为 Json 对象
    在我们对JSON进行处理的时候,大概率我们会需要把字符串转换为JSON对象后才能进行处理。Python贴心的使用json.loads(employee_string)就可以了。首先需要做的就是导入JSON库。#includejsonlibraryimportjson对现代程序员来说,JSON数据结构基本上是非常常见的数据......
  • 在python中使用cmd命令行
    在python中使用命令行环境:windows10python版本:3.7importoslists=os.popen('adbdevices').read()ip_info=os.popen('ipconfig').read()#一行一行读取ip_infos=os.popen('ipconfig').readlines()#所有都读取存放在一个列表中ping=os.popen('pin......
  • Python 爬虫使用 Selenium 如何在 WebElement 获得属性
    首先,我们需要初始化驱动和指定使用特定的流量器。 代码如下: fromseleniumimportwebdriverwd=webdriver.Firefox()上面的代码可以简单的理解为启动一个Firefox的实例。使用css选择器可以把程序读取的HTML理解为一个Doc。我们需要在Doc中选择我们的元素,......
  • Python实现排序的方式有:内置函数sort()和sorted()以及lambda函数
    排序是计算机编程中经常需要用到的操作,它将一组数据按照规则重新排列,以便更好地处理数据。在Python中,有多种方法可以对数组进行排序,本文将从多个方面进行介绍。一、Python中的排序方法Python中内置了多个排序算法,包括冒泡排序、插入排序、选择排序、快速排序等。使用内置的sort(......