(self,n,a,w)
6 self.grade = g
7 #覆写父类的方法
8 def speak(self):
9 print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))
10
11 s = student('ken',20,60,3)
12 s.speak()
2.类的多重继承
class 类名(父类1,父类2,....,父类n)
<语句1>
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法
#另一个类,多重继承之前的准备
1 class speaker():
2 topic = ''
3 name = ''
4 def __init__(self,n,t):
5 self.name = n
6 self.topic = t
7 def speak(self):
8 print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic))
#多重继承
1 class sample(speaker,student):
2 a =''
3 def __init__(self,n,a,w,g,t):
4 student.__init__(self,n,a,w,g)
5 speaker.__init__(self,n,t)
6
7 test = sample("Tim",25,80,4,"Python")
8 test.speak()#方法名同,默认调用的是在括号中排前地父类的方法
四、类的专业方法
Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。
1 __init__
类似于构造函数
1 #!/usr/local/bin/python
2 class Study:
3 def __init__(self,name=None):
4 self.name = name
5 def say(self):
6 print self.name
7 study = Study("Badboy")
8 study.say()
2 __del__
类似于析构函数
1 #!/usr/local/bin/python
2 class Study:
3 def __init__(self,name=None):
4 self.name = name
5 def __del__(self):
6 print "Iamaway,baby!"
7 def say(self):
8 print self.name
9 study = Study("zhuzhengjun")
10 study.say()
3__repr__
使用repr(obj)的时候,会自动调用__repr__函数,该函数返回对象字符串表达式,
用于重建对象,如果eva l(repr(obj))会得到一个对象的拷贝。
1 #!/usr/local/bin/python
2 class Study:
3 def __init__(self,name=None):
4 self.name = name
5 def __del__(self):
6 print "Iamaway,baby!"
7 def say(self):
8 print self.name
9 def __repr__(self):
10 return "Study('jacky')"
11 study = Study("zhuzhengjun")
12 study.say()
13 print type(repr(Study("zhuzhengjun"))) # str
14 print type(eva l(repr(Study("zhuzhengjun")))) # instance
15
16 study = eva l(repr(Study("zhuzhengjun")))
17
18 study.say()
4__str__
Python能用print语句输出内建数据类型。有时,程序员希望定义一个类,要求它的对象也能用print语句输出。Python类可定义特殊方法__str__,为类的对象提供一个不正式的字符串表示。如果类的客户程序包含以下语句:
print objectOfClass
那么Python会调用对象的__str__方法,并输出那个方法所返回的字符串。
1 #!/usr/local/bin/python
2
3 class PhoneNumber:
4 def __init__(self,number):
5 self.areaCode=number[1:4]
6 self.exchange=number[6:9]
7 self.line=number[10:14]
8
9 def __str__(self):
10 return "(%s) %s-%s"%(self.areaCode,self.exchange,self.line)
11
12 def test():
13 newNumber=raw_input("Enter phone number in the form. (123) 456-7890: \n")
14 phone=PhoneNumber(newNumber)
15 print "The phone number is:"
16 print phone
17
18 if__name__=="__main__":
19 test()
方法__init__接收一个形如"(xxx) xxx-xxxx"的字符串。字符串中的每个x都是电话号码的一个位数。方法对字符串进行分解,并将电话号码的不同部分作为属性存储。
方法__str__是一个特殊方法,它构造并返回PhoneNumber类的一个对象的字符串表示。解析器一旦遇到如下语句:
就会执行以下语句:
程序如果将PhoneNumber对象传给内建函数str(如str(phone)),或者为PhoneNumber对象使用字符串格式化运算符%(例如"%s"%phone),Python也会调用__str__方法。
5__cmp __
比较运算符,0:等于 1:大于 -1:小于
class Study:
def __cmp__(self, other):
if other > 0 :
return 1
elif other < 0:
return - 1
else:
return 0