类的方法
类的方法实际上是为类的能力建模的,那么定义类的方法让类具有一定的能动性。在类外部调用该类的方法就可以完成相应的功能,or 改变类的状态 or 达到其他目的
类中的方法和调用与函数定义和调用方式基本相同,区别有:
- 方法的第一个参数必须是 self,而且不能省略
- 方法的调用需要实例化类,并且以
实例名.方法名(参数列表)
的形式调用 - 整体进行一个单位的缩进,表示其属于类
>>> class smplClass:
... def info(self):
... print('my class')
... def mycacl(self,x,y):
... return x+y
...
>>> sc = smplClass()
>>> print('use info')
use info
>>> sc.info()
my class
>>> print('use mycacl')
use mycacl
>>> print(sc.mycacl(2,3))
5
在 python 语言的类定义中,可以定义一个特殊的构造方法,即__init__()
方法,用于在类实例化时初始化相关数据,如果在这个方法中有相关参数,在初始化时就必须提供
⚠️:这个函数 init 前后分别是两个下划线
>>> class demoInit:
... def __init__(self,x,y=0):
... self.x = x
... self.y = y
...
>>> dia = demoInit(3)
>>> print('dia.x + dia.y')
dia.x + dia.y
>>> print(dia.x+dia.y)
3
>>> dib = demoInit(3,7)
>>> print('dib.x + dib.y')
dib.x + dib.y
>>> print(dib.x + dib.y)
10
读到这里,你有木有发现这个 self 就是C++里面的 this 指针嘛···
类中的方法既可以调用本类中的方法,也可以调用全局函数来完成相关任务。调用全局函数和面向过程的调用方式相同,而调用本类中应这样:
self.<方法名>(参数列表)
调用本类中的方法时,提供的参数列表也不应该包括 self
>>> def coord_chng(x,y):
... return (abs(x),abs(y))
... # 定义一个全局函数,x,y求绝对值
...
>>> class Ant:
... def __init__(self,x=0,y=0):
... self.x = x
... self.y = y
... self.disp_point()
... def move(self,x,y):
... x,y = coord_chng(x,y)
... self.edit_point(x,y)
... self.disp_point()
... def edit_point(self,x,y):
... self.x = x
... self.y = y
... def disp_point(self):
... print('instant time position: (%d,%d)'%(self.x,self.y))
...
>>> ant_a = Ant()
instant time position: (0,0)
>>> ant_a.move(2,4)
instant time position: (2,4)
>>> ant_a.move(-9,6)
instant time position: (9,6)