Python3 面向对象 且与 PHP 区别

阅读数: 907 2018年11月29日

只记录区别,一致的地方不记录


【类对象】

1、属性和方法的引用:

python 不管是类引用还是实例引用,都是标准语法: obj.name 或 obj.method();

php 类的静态属性(或常量)引用:class::name ,类的静态方法引用:class::method();

实例属性引用 $obj->name,实例的方法引用:$obj->method();


2、构造方法

python 的构造方法名是 __init__(self)

    def __init__(self):

    self.data = []

    注意:类方法里面的第一个参数只能是实例对象,但不限定变量名。所以 self 是指类的实例,self 只是个变量,可以使用 this 等自定义的变量。

php 的构造方法是 __construct() ,且可以不传入任何参数


3、析构方法

python 的析构方法是 __del__(self)

php  的析构方法是 __destruct()


4、类的静态变量引用

python 无静态变量,如果要外部引用直接 class.attr 引用;

            内部引用,需要 self.attr 引用。

php 有静态变量和常量,内部引用:static::attr 或 self::attr 

        实例属性外部引用:$obj->attr;内部引用:$this->attr



【类方法】

1、类方法定义

python 使用 def 关键词定义,与定义函数一样。

php 使用 function 关键词定义。


2、定义方法必须传入类实例作为第一个参数

python 类方法必须包含“类实例”参数 self(self 可以自己定义其他名字)

php 无此规则,且方法内使用 $this 调用类实例。


【继承】

1、继承方式

python 继承: class child(base),使用圆括号方式

php 继承:class child extend base 使用关键词:extend


2、多继承

python 支持多继承,且根据圆括号里面父类的顺序查找父类里面的方法:class child(base, base2, base3)

php 不支持多继承


【方法重写】

1、引入父类方法区别

python 使用 super() 类获得父类对象:super(Child, c).method();

php 直接使用 parent::method() 即可;


【类属性/方法权限】

1、类属性的私有声明

python 使用两个下划线开头(__)声明该属性是私有的。内部使用 self.__private_attr 访问;

php 使用 private $attr 声明私有属性。


2、类方法的私有化声明

python 两个下划线开头定义方法名声明私有方法:def __private_method(self);

php 使用 private menthod() 声明私有方法;


3、proteced 权限

python 无此权限

php 通过 protected 声明;



【类的专有方法】

python 有以下专用类方法:

__init__ : 构造函数,在生成对象时调用

__del__ : 析构函数,释放对象时使用

__repr__ : 打印,转换

__setitem__ : 按照索引赋值

__getitem__: 按照索引获取值

__len__: 获得长度

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方


php 有以下专用类方法,也称为魔术方法:

•__construct(),类的构造函数

•__destruct(),类的析构函数

•__call(),在对象中调用一个不可访问方法时调用

•__callStatic(),用静态方式中调用一个不可访问方法时调用

•__get(),获得一个类的成员变量时调用

•__set(),设置一个类的成员变量时调用

•__isset(),当对不可访问属性调用isset()或empty()时调用

•__unset(),当对不可访问属性调用unset()时被调用。

•__sleep(),执行serialize()时,先会调用这个函数

•__wakeup(),执行unserialize()时,先会调用这个函数

•__toString(),类被当成字符串时的回应方法

•__invoke(),调用函数的方式调用一个对象时的回应方法

•__set_state(),调用var_export()导出类时,此静态方法会被调用。

•__clone(),当对象复制完成时调用

•__autoload(),尝试加载未定义的类

•__debugInfo(),打印所需调试信息


参考资料
http://www.runoob.com/python3/python3-class.html
手册下载地址:https://files-cdn.cnblogs.com/files/nlsoft/Python34_ZH.7z
phpriji.cn | 网站地图 | 沪ICP备17015433号-1