6 自定义功能单元(二)
面向对象编程的基本方法和基本思路
6.1 面向对象编程概述
使得数据的管理更加合理和自动化,减少程序粗错,少写代码,使程序更加容易维护。
6.1.1 万物皆对象
6.1.2 对象优越性
封包
继承
包含
6.1.3 类和对象
6.2 定义和使用类
5.2.1 定义类
class <类名>(父类名):
pass
In [2]:
class MyClass: pass dir(MyClass)
Out[2]:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
6.2.2 使用类
In [6]:
class MyClass: 'MyClass help.' myclass = MyClass() print('输出类说明:') print(myclass.__doc__) #两个_ print('显示类帮助信息:') help(myclass)
输出类说明: MyClass help. 显示类帮助信息: Help on MyClass in module __main__ object: class MyClass(builtins.object) | MyClass help. | | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
6.3 类的属性和方法
6.3.1 类的方法
方法的第一个参数必须是self,且不能省略
方法的条用需要实例化,并以实例名.方法名的形式调用
整体进行一个单位的缩进,表示其属于类体中的内容
In [7]:
class SmpClass: def info(self): print('我定义的类!') def mycacl(self,x,y): return x+y sc=SmpClass() sc.info() print('---------------------') print(sc.mycacl(3,4))
我定义的类! --------------------- 7
In [12]:
class DemoInit: def __init__(self,x,y=0): self.x=x self.y=y def mycacl(self): return self.x+self.y #调用了本类中的方法__init__ dia=DemoInit(3) print(dia.mycacl()) print('----------------------------') dib=DemoInit(3,7) print(dib.mycacl())
3 ---------------------------- 10
In [14]:
def coord_chng(x,y): return (abs(x),abs(y)) class Ant: #没有初始化参数,默认为0,且每次执行返回都又传递回来 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('当前位置:(%d,%d)' % (self.x,self.y)) ant_a=Ant() ant_a.move(2,4) ant_a.move(-9,6) ant_a.move(-9,6)
当前位置:(0,0) 当前位置:(2,4) 当前位置:(11,10) 当前位置:(20,16)