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

类的继承

概述

  1. Python 支持类的继承
    子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。
    但是父类的私有属性在类外部无法直接进行访问

  2. Python同样有限的支持多继承形式。
    需要注意圆括号中父类的顺序:
    若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

使用

class ParentClass:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
class ChildClass(ParentClass): # 定义子类,并继承父类

方法重写

Python同样支持在子类重写父类的方法
如果想要调用父类的方法可以:

  1. super(子类, self).父类中的方法(...))
  2. 父类名.父类中的方法(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里面,可以迭代使用,而不在意具体是哪个类

posted @ 2022-06-01 10:45  kingwzun  阅读(58)  评论(0编辑  收藏  举报