Python __ 面向对象基础
定义类
class ClassName: #属性 . . . #方法 . . .
小样例:
代码里面的self作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。
后面会详细说
class Point: x=0 y=0 def toString(self): return "({},{})".format(self.x,self.y) a=Point() print(a.toString()) # 结果:(0,0)
self解释:
- 在Python类中规定,函数的第一个参数是实例对象本身。
- 并且约定俗成,把其名字写为self。
(self 不是 python 关键字,可以把他换成任何名称) - 作用相当于java中的this
表示当前类的对象,可以调用当前类中的属性和方法。
构造方法__init__()
类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用。
python默认有个无参构造方法
可以重写为有参构造方法
例如:
def __init__(self,xx,yy): self.x=xx self.y=yy
类方法
类方法必须包含参数 self, 且为第一个参数
私有方法: 两个下划线开头,声明该方法为私有方法。只能在类的内部调用 ,不能在类的外部调用。
例如:
def move(self,x1,y1): self.x+=x1 self.y+=y1 def toString(self): return "({},{})".format(self.x,self.y)
类属性
私有属性: 两个下划线开头,声明该属性为私有。不能在类的外部被使用或直接访问。
#定义基本属性 a = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __b = 0
类的继承
概述
-
Python 支持类的继承
子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。
但是父类的私有属性在类外部无法直接进行访问 -
Python同样有限的支持多继承形式。
需要注意圆括号中父类的顺序:
若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
使用
class ParentClass: # 定义父类 def myMethod(self): print ('调用父类方法') class ChildClass(ParentClass): # 定义子类,并继承父类
方法重写
Python同样支持在子类重写父类的方法
如果想要调用父类的方法可以:
super(子类, self).父类中的方法(...))
父类名.父类中的方法(self,...)
class Parent: # 定义父类 def myMethod(self): print ('Parent') class Child(Parent): # 定义子类 def myMethod(self): print ('Child') c = Child() # 子类实例 c.myMethod() # 子类调用重写方法 super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法
接口
python没有接口,通常通过抽象(基)类和抽象方法实现
抽象基类
#抽象类加抽象方法就等于面向对象编程中的接口 from abc import ABCMeta, abstractmethod class interface(object): __metaclass__ = ABCMeta #指定这是一个抽象类 @abstractmethod #抽象方法 def Lee(self): pass def Marlon(self): pass class RelalizeInterfaceLee(interface): #必须实现interface中的所有函数,否则会编译错误 def __init__(self): print '这是接口interface的实现' def Lee(self): print '实现Lee功能' def Marlon(self): pass class RelalizeInterfaceMarlon(interface): #必须实现interface中的所有函数,否则会编译错误 def __init__(self): print '这是接口interface的实现' def Lee(self): pass def Marlon(self): print "实现Marlon功能"
多态
详细请看
python多态采用鸭子类型,
直观来讲就是说:python的多态体现在实现相同方法的类,就可以放入同一个list里面,可以迭代使用,而不在意具体是哪个类
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/16333504.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步