Python 学习笔记(十四)Python类(二)

创建简单的类

新式类和经典类(旧式类)

Python 2.x中默认都是经典类,只有显式继承了object才是新式类

Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object

新式类都从object继承,经典类不需要

新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

新式类相同父类只执行一次构造函数,经典类重复执行多次

截止到python2.1,只存在旧式类。旧式类中,类名和type是无关的:如果x是一个旧式类,那么x.__class__定义了x的类名,但是type(x)总是返回<type 'instance'>。这反映了所有的旧式类的实例是通过一个单一的叫做instance的内建类型来实现的,这是它和类不同的地方。

新式类是在python2.2为了统一类和实例引入的。一个新式类只能由用户自定义。如果x是一个新式类的实例,那么type(x)和x.__class__是一样的结果(尽管这不能得到保证,因为新式类的实例的  __class__方法是允许被用户覆盖的)。

 1 >>> class AA: #经典类(旧式类)
 2     pass
 3 
 4 >>> aa =AA() 
 5 >>> type(aa)
 6 <type 'instance'>
 7 >>> type(AA)
 8 <type 'classobj'>
 9 >>> aa.__class__
10 <class __main__.AA at 0x000000000396E348>
11 >>> class BB(object): #新式类
12     pass
13 
14 >>> bb = BB()
15 >>> type(bb)
16 <class '__main__.BB'>
17 >>> bb.__class__
18 <class '__main__.BB'>
19 >>> print aa
20 <__main__.AA instance at 0x000000000390ECC8>
21 >>> print bb
22 <__main__.BB object at 0x0000000002B00B00>
23 >>> 

编写方法

示例1:

 1 #! /usr/bin/env python
 2 # coding =utf-8
 3 
 4 #通常类名首字母大写
 5 
 6 class Person(object):
 7     h =1.8  #属性
 8     def getName(self): #定义一个方法,第一个参数必须是self,而且必须写上,self是类的实例,而非类
 9         print "My name is lily."
10 
11     def color(self,col):
12         print "The sky is {0}".format(col)
13 
14 
15 
16 p = Person() #把类实例化,p就是实例对象
17 p.getName()  #调用实例里面的方法或者属性
18 p.color("blue")
19 print p.h
20 
21 
22 p.a="hello" #给对象赋了一个属性
23 print p.a
24 
25 p.h =2.8
26 print p.h

 示例2:

 1 #!/usr/bin/env python
 2 #coding=utf-8
 3 
 4 """
 5 地址的类PersonAddress
 6 属性 人员的姓名| 人员的EMAIL
 7 方法 访问每个属性|修改email地址
 8 """
 9 
10 class PersonAddress(object):
11 
12     name ="zhangsan"
13     email="zhangsan@gmail.com"
14 
15     def aboutPerson(self): #self必须写上
16         print "NAME:",PersonAddress.name  #访问属性
17         print "EMAIL:",PersonAddress.email
18 
19     def changeEmail(self,email):
20         PersonAddress.email =email
21 
22 
23 
24 p = PersonAddress()
25 p.aboutPerson()
26 p.changeEmail("cc@gamail.com")
27 p.aboutPerson()

类和实例

原文地址:https://www.cnblogs.com/wangruihua-521/p/8569208.html