从C#到Python —— 4 类及面向对象
2010-09-30 22:41:42 来源:WEB开发网4.5.1 对象的特殊属性
除了用户自定义的类属性外,Python中的所有对象都拥有一些内置的特殊属性,它们可以帮助我们回答如下问题:
* 对象的名称是什么(__name__)?
* 这是哪种类型的对象(__class__)?
* 对象知道些什么(__doc__)?
* 对象能做些什么(__dict__)?
* 对象(的类)继承自谁(__bases__)?
* 它在哪一个模块中(__module__)?
限于篇幅,本文不一一解释这些特殊属性的含义,你可以试着找一个对象(Python中一切皆对象,所以这些属性适用于所有类型的对象,包括字符串、数值、列表、元组、字典、函数、自定义类、类实例和类方法等),打印它的这些属性,不难明白它们是做什么用的。
4.5.2 自省函数
Python提供了很多有用的自省函数,帮助我们找到对象的有用信息,常用的自省函数包括:
* id() 返回对象唯一的标识符
* repr() 返回对象的标准字符串表达式
* type() 返回对象的类型
* dir() 返回对象的属性名称列表
* vars() 返回一个字典,它包含了对象存储于其__dict__中的属性(键)及值
* hasattr() 判断一个对象是否有一个特定的属性
* getattr() 取得对象的属性
* setattr() 赋值给对象的属性
* delattr() 从一个对象中删除属性
* callable() 测试对象的可调用性
* issubclass() 判断一个类是另一个类的子类或子孙类
* isinstance() 判断一个对象是否是另一个给定类的实例
* super() 返回相应的父类
同样,我建议你在Shell中逐项试试这些函数的功能,以更好地体会自省的威力。
4.6 本章小结
本章介绍了Python中面向对象编程的基本知识,并与C#做了简单对比,要点如下:
(1) Python用class关键字、类名、括号加父类(可选)及冒号定义类,实例化类时不需要new关键字;
(2) Python可以对象中动态添加成员变量,但建议在__init__函数中添加成员变量并初始化;
(3) Python的类中可以通过名称前加双下划线定义私有变量(及私有方法);
(4) Python中定义类的方法与定义普通函数在语法上基本相同,区别是非静态方法的第一个参数总是类的实例,即self;
(5) 通过修饰符@staticmethod可以定义一个类的静态方法;
(6) Python对类方法重载和运算符重载的实现方式与C#有一定区别,不过我认为Python的方式更简单一些;
(7) Python支持类的单继承和多继承,但不支持接口,也不(直接)支持抽象类;
(8) 通过自省,可以在运行时获得对象的有用信息。
关于Python的面向对象编程还有很多高级主题,限于本人的能力和精力,不能一一详细介绍,推荐阅读文后的参考资料。
更多精彩
赞助商链接