Python中如何定义类和创建对象实例

  介绍

这篇文章将为大家详细讲解有关Python中如何定义类和创建对象实例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

尽管Python在函数编程中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门面向对象语言哦。因此我们关注Python在《外交政策》上的优势的同时,还得了解一下Python在OO方面的特性。

要讨论Python的面向对象的特性,了Python中解的类自然是首当其冲了。在Python中定义类和创建对象实例都很简单,具体代码如下:

class 爷爷:   ,,,def  __init__(自我):   ,,,,,,,印刷(& # 39;我\ & # 39;m 爷爷# 39;)   ,,   ,,   class 父亲(爷爷):   ,,,def  __init__(自我):   ,,,,,,,印刷(& # 39;我\ & # 39;m 父亲! & # 39;)   ,,   class 儿子(父亲):   ,,,“““A  simple  example  class"““   ,,,i=12345   ,,,def  __init__(自我):   ,,,,,,,印刷(& # 39;这是构造函数,儿子# 39;)   ,,,def  sayHello(自我):   ,,,,,,,return  & # 39; hello  & # 39;   ,,   if  __name__==, & # 39; __main__ # 39;:   ,,,=,儿子的儿子()   ,,,#,类型帮助信息   ,,,print(& # 39;类型帮助信息:,& # 39;,Son.__doc__)   ,,,#类型名称   ,,,print(& # 39;类型名称:& # 39;,Son.__name__)   ,,,#类型所继承的基类   ,,,print(& # 39;类型所继承的基类:& # 39;,Son.__bases__)   ,,,#类型字典   ,,,print(& # 39;类型字典:& # 39;,Son.__dict__)   ,,,#类型所在模块   ,,,print(& # 39;类型所在模块:& # 39;,Son.__module__)   ,,,#实例类型   ,,,print(& # 39;实例类型:& # 39;,儿子().__class__)

运行情况:

Python  3.3.2  (v3.3.2: d047928ae3f6, May  16, 2013年,00:03:43),[MSC  v.1600  32, bit (英特尔)],提醒win32   Type “copyright",,“credits",趁机“许可证()“for  more 信息。   在祝辞祝辞,================================,RESTART ================================祝辞祝辞祝辞

这是构造函数,儿子

类型帮助信息:,一个简单的示例类

类型名称:儿子

类型所继承的基类:(& lt;类& # 39;__main__.Father& # 39;祝辞,)

类型字典:{& # 39;__module__& # 39;: & # 39; __main__ # 39;, & # 39; sayhello # 39;: & lt;函数的儿子。在0 x010194f8> sayHello, & # 39; __doc__& # 39;: & # 39;类# 39;一个简单的例子,& # 39;__init__ # 39;: & lt;函数的儿子。__init__ (0 x010194b0> & # 39;我# 39;:12345}

类型所在模块:__main__

这是构造函数,儿子

实例类型:& lt;类& # 39;__main__.Son& # 39;在

祝辞祝辞祝辞

<强> # Python支持多重继承

首先第一点,你会发现类的定义中有一个括号,这是体现继承的地方。Java用扩展、c#、c++用冒号(:),Python则用括号了。从括号中包含着两个值,聪明的你一定可以发现:Python支持多重继承;(更多学习内容,请点击)

# __init__是类中的构造函数

第二点,__init__是类中的构造函数,两种不同形式的构造函数体现了Python支持函数重载。在构造函数中,有一个特别的参数自我,其含义与我们在Java和c#中常见的这是一样的。在这里需要强调一点:在类中定义的方法实质上也是函数,但是在方法定义的时候必须包含自我这个参数,而且必须将自我这个参数放在第一位;

<强> # Python成员变量

第三点,在Python中,你并不需要显式的声明类的数据成员,而是在赋值的时候,被赋值的变量就相应成为了类的数据组成,正如代码中x和y的。不仅你不需要显式的声明数据成员,更加特别的,你甚至可以通过德尔方法将类中数据的会员给删掉。当我第一次看到这样的特性的时候,着实吃了一惊。毕竟OO的第一条就是封装了,但是这样的特性是不是破坏了封装的特性呢?

<强> # Python方法二义性问题

第四点,由于Python支持多重继承,因此就有可能出现方法二义性问题[1]。然而由于Python遵循深度优先的搜寻法,则很好地避免了方法二义性的问题,例如在以上的代码中,MyClass同时继承于BaseClassA和BaseClassB,假设MyClass调用一个叫derivedMethod方法,derivedMethod同时定义在BaseClassA和BaseClassB中,且签名也完全相同,那么BaseClassA中的方法将被调用。如果BaseClassA中并没有定义derivedMethod,而是BaseClassA的父类定义了这个方法的话,将会是BaseClassA的父类中derivedMethod被调用。总之,继承方法搜索的路径是先从左到右,在选定了一个BaseClass之后,将会一直沿着该BaseClass的继承结构进行搜索,直至最顶端,然后再到另外一个一个BaseClass。

Python中如何定义类和创建对象实例