方法(OOP)
一个方法函数的等价物在吗面向对象编程.名词之于动词,就像变量之于方法——方法就是对变量执行操作的动作。方法接受参数作为参数,对这些参数进行操作,然后在对象上调用该方法时产生输出对象.方法类似于函数,但方法也根据它们在类设计。在类中,变量被调用属性,因此方法通常对属性进行操作。
要完全理解面向对象编程,您应该熟悉编程的基础知识-请参阅另请参阅查看一些关于基本编程的建议页面。
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 |
|
使用Python,可以将下列哪一种方法添加到类中冰淇淋
根据勺子的数量打印出订单的大小,1到3勺是小勺,4到5勺是中勺,超过这个数就是大勺。
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
(忽略这些函数可能返回的事实没有一个
连同打印的尺寸)
方法
方法类似于函数或子例程或算法在类内部使用。方法可以包括for循环,while循环,以及任何其他编程组件。方法可以操作与对象关联的属性。主要有三种类型的方法:接口方法,构造函数方法,实现方法.大多数初级程序员都熟悉实现方法。例如,在Python中,向列表追加操作需要一个方法附加
并将其应用于列表对象。
1 2 3 4 5 6 7 |
|
在Python中调用对象的方法时,格式为instanceName.method ()
.有些初学者忘记在方法后添加括号,所以要注意。有时需要在方法调用中包含参数(如上面示例中的append)。
在Python中,方法的第一个参数是自我
.的自我
参数用于创建成员变量。在类内部,我们将根据类的特定实例将可能具有不同值的任何变量初始化为自我。VariableName
.
接口方法
接口方法这些方法的目的是为对象与外部环境提供接口,例如,其他对象的方法、来自用户的数据输入、来自另一个对象的数据,或者不在同一对象内部的任何东西。
面向对象设计的原则之一是封装.封装是一种将对象构建为包含其自身所有数据和方法的胶囊的技术。然而,一个被孤立的对象是毫无用处的,它应该是一个更大的系统的一部分。这时就需要接口方法了:它们为对象提供了获取外部输入和输出所需的最小接口,因此它确实可以成为更大系统的一部分,同时本身也是一个更小的系统。
例如,定义对象是一种非常好的面向对象实践getter和一个setter方法,最主要的原因是安全性和代码完整性。getter从用户输入中获取变量,setter在整个类中使用时分配变量。getter和setter是间接提供外部代理的内部属性访问的方法。让我们看看它们是如何实现的:
Python中的Getter和Setter接口方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20类广场(对象):def__init__(自我,sideLength):自我.sideLength=sideLength# Getter:defgetSideLength(自我):返回自我.sideLength# Setter:defsetSideLength(自我,sideLength):自我.sideLength=sideLength广场=广场(10.0)打印广场.getSideLength()#将10.0打印到屏幕上广场.setSideLength(3.0)打印广场.getSideLength()#打印3.0到屏幕上
这个代码片段定义了一个广场
类的实例sideLength
属性,可以通过getter方法访问getSideLength
通过setter方法提供该属性的值setSideLength
这将提供一种改变该属性值的方法。
的实例广场
类的初始值为sideLength
等于10.0,该实例被分配给广场
变量。然后sideLength变量的值被打印到屏幕上,然后sideLength的值被更新,最后,的更新值被更新sideLength
变量被打印到屏幕上。
的__init__ ()
对于面向对象编程的初学者来说,Python方法可能令人困惑。这是另一种类型的方法,叫做构造函数.
构造函数
构造函数用于实例化类,这是有效地创建对象的方法(请记住,类是对象的蓝图,对象是类的实例)。它们通常以类命名(如Java和c#)或以关键字命名(如Python和Ruby)。构造函数方法的参数通常是分配给该对象的部分或全部属性的初始值。在上一节的示例中,您已经看到了分配属性的构造函数示例。让我们看一个构造函数的例子,它不接受任何形参,而是将对象属性初始化为一些默认值:
Python中的构造函数:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19类广场(对象):构造函数:def__init__(自我):自我.sideLength=5.0defgetSideLength(自我):返回自我.sideLengthdefsetSideLength(自我,sideLength):自我.sideLength=sideLength广场=广场()#调用构造函数方法打印广场.getSideLength()#将5.0打印到屏幕上广场.setSideLength(3.0)打印广场.getSideLength()#打印3.0到屏幕上
程序的结构基本相同,除了构造函数现在不接受参数,并在为没有单独设置其值的属性调用getter时返回默认值。
还要注意,不仅构造函数实现需要遵守一些特定于语言的约定,构造函数调用也需要遵守。在Java中,在调用构造函数(带(或不带)参数)之前,通过添加关键字'new'来调用构造函数。在Python中,构造函数是通过向类传递参数来调用的(这实际上会触发__init__
方法)。
实现方法
实现方法是最类似于标准过程函数的方法。顾名思义,这是一个将实际实现对象功能的方法。这些是程序员会写入代码的典型方法。这通常是通过操作对象的属性并提供一些输出来实现的(或者在不提供任何即时输出的情况下以特定的方式改变一些内部属性,等等)。让我们实现outputArea
功能进出广场
对象:
Python中的实现方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21类广场(对象):构造函数:def__init__(自我):自我.sideLength=5.0defgetSideLength(自我):返回自我.sideLengthdefsetSideLength(自我,sideLength):自我.sideLength=sideLength#实现功能:defoutputArea():返回自我.getSideLength()*自我.getSideLength()广场=广场()广场.setSideLength(3.0)打印广场.outputArea()#将9.0打印到屏幕上
那么,这里发生了什么?的输出。outputArea ()
方法显示边长等于该正方形的sidelth属性的正方形的面积。对象内部方法的基本准则是在其数据内部操作以提供实际功能。任何具有更通用功能而不局限于单个类(或类层次结构)的方法通常都在模块内定义(可以将模块视为旨在提供可应用于许多不同类的功能的方法的集合)。如果Square的sideLength属性是4.0而不是3.0,那么输出将是16.0而不是9.0。该方法也不局限于对其属性执行一些封闭操作,我们可以使用对象的属性和一些任意参数来操作输出,如下所示:
Python中outputArea方法的新实现:
1 2 3 4defoutputAreaTimesN(自我,n):返回(自我.getSideLength()*自我.getSideLength())*n打印广场.outputAreaTimesN(2)#将18.0打印到屏幕上
假设我们有一款电子游戏,玩家控制一条龙。龙有很多特点——它可以喷火,它可以飞,它有颜色,当它摧毁村庄时,它会得到分数,等等。有哪些方法呢?游戏中的另一个角色是骑士-骑士的一些方法是什么?
龙可以有一个
飞
方法,将其操作设置为飞行并更新其速度和飞行高度。龙可以有喷火的方法,将其状态更新为战斗喷火模式。有一种方法可以在它获得分数时更新它的分数。龙可以有一种方法,当它被攻击或治疗时更新它的生命值。骑士可能有方法更新他跑得有多快,他赚了多少分,或者改变他的生命值。他可能有办法改变他的武器或盔甲。