python面向对象程序设计(OOP)

python面向对象程序设计(OOP)

  1. 类定义语法

    class className:
    在python中可以使用内置方法isinstance()来测试一个对象是否为某个类的实例。

  2. self参数

    类的所有实例方法都必须至少有一个名为self的参数,并且必须是方法的第一个参数,self参数代表对象本身。在类的实例方法中访问实例属性时需要以self为前缀,但在外部通过对象名调用对象方法时并不需要传递这个参数,如果在外部通过调用对象方法则需要显示为self参数传值。

  3. 类成员与实例成员

    实例属性:在构造函数__init__()中定义,定义和使用时必须以self作为前缀。

    类属性:是在类中所有方法之外定义的数据成员。

    在主程序,实例属性属于实例(对象),只能通过对象名访问;而类属性属于类,可以通过类名和对象名访问。

    python特有的动态类型特点:可以动态地为类和对象增加成员。

    实例对象.外加方法 = types.MethodType(方法,类)

  4. 私有成员与公有成员

用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员。
* _xxx:这样的对象叫做保护成员,不能用"from module import ",只有类对象和子类对象能访问这些成员。
* __xxx__:系统定义的特殊成员。
* __xxx:类中私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过
对象名._类名__xxx*这样的特殊方式访问。

  1. 方法:
    • 公有方法私有方法静态方法类方法

    公有方法,私有方法属于对象,私有方法的名字以"__"开始,每个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和对象的成员。

    公有方法通过对象名直接调用,私有方法不能,只能在属于对象的方法中通过self调用或在外部通过python支持的特殊方式来调用。如果通过类名来调用属于对象的公有方法,需要显示为该方法的self参数传递一个对象名,用来明确指定访问哪个对象的数据成员。

    静态方法和类方法都可通过类名和对象名调用,但不能直接访问属于对象的成员,只能访问属于类的成员。一般将cls作为类的第一个参数名称,并且在调用类方法时不需要为该参数传递值。

        class classname:    
        @classmethod #类方法       
        def classmethod(cls):
        @staticmethod #静态方法
        def …
    
  2. 属性

在python2.x中,使用@property或property()函数来声明一个属性(把一个方法变成属性调用),然而属性并没有得到真正意义的实现,也没有提供应有的访问保护机制,为对象增加新的数据成员时,将隐藏同名的已有属性。

  1. 继承机制

在继承关系中,已有的设计好的类称为父类或基类,新设计的类称为子类或派生类。派生类可以继承父类的公有成员,但是不能继承其私有成员。如果需要在派生类中调用基类的方法,可以使用内置函数super()通过基类名.方法名()的方式来实现。
python支持多继承,如果父类中有相同的方法名,而在子类中使用时没有定义父类名,则python解释器将从左至右按顺序搜索

你可能感兴趣的:(python面向对象程序设计(OOP))