初学 Python ,学习到 Python 继承,觉得继承/多态在 Python 中基本是废的,麻烦大家帮我解惑, 非常感谢大家!下附疑惑代码

2017-02-04 16:27:57 +08:00
 palmers

代码如下:

class Student(object):
    def __init__(self,name,age,school):
        self.__name = name
        self.__age = age
        self.__school = school

    def toString(self):
        print('我是%s,我%s 岁了,在%s 上学.' %(self.__name,self.__age,self.__school))


class XiaoMing(Student):
    def __init__(self,name,age,school):
        self.__name = name
        self.__age = age
        self.__school = school

    ''' 覆写父类 toString()方法'''
    # def toString(self):
    #     print('我是%s,我%s 岁了,在%s 上学.' %(self.__name,self.__age,self.__school))
''' 接受 Student 任何子类对象'''
def fun(stu):
    stu.toString()

###测试
xm = XiaoMing('小明',25,'北大')
fun(xm) 

按照继承, XiaoMing继承自 Student, 且属性是一模一样的,则toString函数再写一遍是多余的, 道理讲,应该直接使用父类的 toString方法,就可以了, 但是我去掉XiaoMingtoString方法后,就找不到 自身实例的私有属性了, 因为 python 解释器将私有属性名改变了, 我就觉得在这里多态基本都是废的, 代码复用完全无效了,

顺便问下大家, 继承/多态 在python中还有那些有用的地方?

6110 次点击
所在节点    Python
42 条回复
ryd994
2017-02-05 08:36:48 +08:00
道理很简单,因为你在子类里又声明了一套同名变量,而父类里试图打印的是父类里的变量。名可名非常名
你怎么不在 C++里继承然后声明同名变量试试? C++也辣鸡咯?
palmers
2017-02-05 13:16:15 +08:00
@greatonce 非常感谢! 我知道了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338062

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX