首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Python“继承”有关问题 很简单,帮忙回答一下

2012-03-03 
Python“继承”问题 很简单,帮忙回答一下!例子:----------------------------------classSchoolMember:def__

Python“继承”问题 很简单,帮忙回答一下!
例子:
----------------------------------
class   SchoolMember:
        def   __init__(self,   name,   age):
                self.name   =   name
                self.age   =   age


class   Teacher(SchoolMember):
        def   __init__(self,   name,   age,   salary):
                SchoolMember.__init__(self,   name,   age)
                self.salary   =   salary
-----------------------------------
说明:   基础类是学校成员(schoolmember)     老师类,继承   学校成员类。

疑问:“def   __init__(self,   name,   age,   salary):”    

为什么   self,name,age   还要再输入一次?   不能直接继承吗?    

如果真的是这样的话,将来如果改动了基础类,是不是所有的继承它的类,都要像类似这样的改动?     其他的函数,与上面的例子(就是__init__),使用方法都是这样吗?

[解决办法]
> > 为什么 self,name,age 还要再输入一次? 不能直接继承吗?

你说的是这一句?
SchoolMember.__init__(self, name, age)

基类的构造函数并不知道应该使用什么参数来调用。

比如你可能想:
SchoolMember.__init__(self, "none ", "1 ")
也可能想:
SchoolMember.__init__(self, name+ "@csdn ", age)

所以你有义务显式指定参数。

> > 如果真的是这样的话,将来如果改动了基础类,是不是所有的继承它的类,
> > 都要像类似这样的改动?

如果基类的__init__增加了一个参数,从责任上来讲,派生类的__init__可能也需要增加一个参数。

但是你可以将改动最小化,比如在基类__init__中设置默认参数。

> > 其他的函数,与上面的例子(就是__init__),使用方法都是这样吗?

你可以将__init__看做一个普通的函数。如果一个函数需要调用其它的函数,那么当被调用的函数接口变动的时候,调用方可能也需要做相应的调整。

热点排行