您的位置:首页 > 编程语言 > Python开发

【Python】Python学习笔记(类的继承)

2011-09-09 16:17 323 查看
单继承

具体的语法就不说了。我很关心的是它到底继承了什么

单继承条件下很简单。类的静态变量、类的静态方法、实例的方法、实例的成员变量、基类的构造函数、基类的析构函数都可以从父类中继承过来。私有方法和私有变量是不能继承的。具体看测试代码:

class Student:

'''this test class'''

name = 'ss'

age = 13

def __init__(self):

self.name='bb'

self.addr="shanghai"

self.__love="man"

print "init..."

def __del__(self):

print "dead..."

def Run(self):

print 'people Run'

@staticmethod

def RunStatic():

print "In Static method..."

def __Good(self):

print "good"

class MiniStudent(Student):

pass

#类

print MiniStudent.name

print MiniStudent.age

print MiniStudent.RunStatic()

print "----================--------"

#实例

mini = MiniStudent()

print mini.name

print mini.age

print mini.Run()

print mini.addr

多继承

多继承下,情况明显比这复杂而且,而且会产生多个基类覆盖函数的问题。很幸运,C#中已经没有了多继承,你只能从多个接口继承。正因为这样,我感觉这种多继承应该一般不需要用,否则代码会很晦涩。下面这个例子你就可以看到。在上面的例子中,我多添加了一个StudentA的类。 具体看测试代码:

class StudentA:

def __init__(self):

print 'init-studenta'

def GoCar(self):

print "Go Car"

class Student:

'''this test class'''

name = 'ss'

age = 13

def __init__(self):

self.name='bb'

self.addr="shanghai"

self.__love="man"

print "init..."

def __del__(self):

print "dead..."

def Run(self):

print 'people Run'

@staticmethod

def RunStatic():

print "In Static method..."

def __Good(self):

print "good"

class MiniStudent(Student,StudentA):

pass

#类

mini = MiniStudent()

print mini.name

print mini.age

print mini.Run()

print mini.addr

现在这个例子是可以通过的,但如果你把

class MiniStudent(Student,StudentA)

修改成

class MiniStudent(StudentA,Student)

这个代码就通不过了。告诉你mini.addr没有定义。

其实是StudentA的构造函数覆写了Student的函数,也就是说只调用了StudentA.__init__()的方法。下面就谈到继承中的覆写问题。

继承中的覆写

从上面的经验可以得到

Python的多继承,但有以下几点需要注意:

1. 继承方法的调用和基类声明顺序有关(最先使用的覆写之后的方法)。

2. 基类init、del ,如果希望都使用,请显示的调用,否则很容易出错。

class StudentA:

def __init__(self):

print 'init-b'

class Student:

def __init__(self):

print 'init-a'

class MiniStudent(Student,StudentA):

def __init__(self):

StudentA.__init__(self)

Student.__init__(self)

#实例

mini = MiniStudent()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: