WEB开发网
开发学院软件开发C语言 从C#到Python —— 4 类及面向对象 阅读

从C#到Python —— 4 类及面向对象

 2010-09-30 22:41:42 来源:WEB开发网   
核心提示: 4.5.1 对象的特殊属性 除了用户自定义的类属性外,Python中的所有对象都拥有一些内置的特殊属性,从C#到Python —— 4 类及面向对象(8),它们可以帮助我们回答如下问题:* 对象的名称是什么(__name__)?* 这是哪种类型的对象(__class__)?* 对象知道些什么(_

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的面向对象编程还有很多高级主题,限于本人的能力和精力,不能一一详细介绍,推荐阅读文后的参考资料。

上一页  3 4 5 6 7 8 

Tags:Python 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接