【Python基础】Python面向对象 - 1

来源:互联网 发布:android淘宝分类菜单 编辑:程序博客网 时间:2024/06/06 03:36

Python中的OOP其实就是在已连接命名空间对象内寻找属性而已。

类名大写!尽量


类内部的方法,通常添加一个单一下划线的前缀。


class语句

class语句一般形式:

class <name>(superclass,...):    data = value    def method(self,...):        self.member = value

类方法

方法调用

instance.method(args... ...)

会被自动翻译为一下形式的类方法函数调用

class.method(instance,args... ...)

这两种调用形式在Python中都有效。

构造函数

如果要保证子类的构造函数也会执行超类构造时的逻辑,一般都必须通过类明确调用超类的__init__方法:

class Super:    def __init__(self,x):        ...default code...class Sub(Super):    def __init__(self,x,y):        Super.__init__(self,x)        ...custom code ...

如果没有这样的调用,子类会完全取代超类的构造函数。

Python2.6和Python3.0中的抽象超类

可以分别使用特殊的类语法来实现/定义抽象基类:

Python3.0

from abc import ABCMeta,abstractmethodclass Super(metaclass=ABCMeta):    @abstractmethod    def method(self,...):        pass

Python2.6:

class Super:    __metaclass__=ABCMeta    @abstractmethod    def method(self,...):        pass

不管哪种方法,效果都是相同的——我们不能产生一个实例,除非在类树的较低层级定义了该方法。

Python中的多态

因为Python中没有类型声明,所以Python中的多态是基于对象接口的

如果通过参数列表进行重载方法,如:

class C:    def method(self, x):        ...    def method(self, x, y, z):        ...

这样的代码是会执行的,但是,只有最后一个定义才会起作用(就像X=1,然后X=2,结果X将是2)


运算符重载


类的伪私有属性/变量名压缩

变量名压缩

class语句内开头有两个下划线,但结尾没有两个下划线的变量名,会自动扩张,从而包含了所在类的名称。

例如,像Spam类内__X这样的变量名会自动编程_Spam__X; 原始的变量名会在头部加入一个下划线,然后是所在类名称。

可以避免多重继承时可能导致的命名冲突。用的不多。


多重继承

在class语句内,首行括号内可以列出一个以上的类。当这么做时,就是在使用所谓的多重继承:类和其实例继承了列出的所有超类的变量名。






0 0