Python论坛  - 讨论区

标题:[python-chinese] 关于super函数的问题?

2005年08月11日 星期四 22:57

jjyoung hellopython at 126.com
Thu Aug 11 22:57:52 HKT 2005

class Matrix(object):

    def __init__(self, numberOfRows, numberOfColumns):
	assert numberOfRows >= 0
	assert numberOfColumns >= 0
         super(Matrix, self).__init__()
         self._numberOfRows = numberOfRows
         self._numberOfColumns = numberOfColumns请问第五行什么意思?ps:我查过关于super的文档,但是还不大懂。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050811/08f2a125/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月11日 星期四 23:03

limodou limodou at gmail.com
Thu Aug 11 23:03:57 HKT 2005

在 05-8-11,jjyoung<hellopython at 126.com> 写道:
>  
> class Matrix(object):
> 
>  def __init__(self, numberOfRows, numberOfColumns):
>  assert numberOfRows >= 0
>  assert numberOfColumns >= 0
>   super(Matrix, self).__init__()
>  self._numberOfRows = numberOfRows
>  self._numberOfColumns = numberOfColumns
> 请问第五行什么意思?
> 
> ps:
> 我查过关于super的文档,但是还不大懂。
>  

super是用在New Style Class中调用父类的方法的安全形式。classic class的调用是:

class A:
    def p(self):pass
class B(A):
    def p(self):
        A.p(self)
        #B中的处理

但是这样可能会有问题,那就是多重继续中的"钻石形状"问题(详情请参考python.org上的关于New Style
class的文档),因此为了在New Style
Class中解决引入了super方法,它可以安全地进行处理。因此它需要传入类名,用来帮助查找应调用的父类。

-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月11日 星期四 23:19

Zoom Quiet zoom.quiet at gmail.com
Thu Aug 11 23:19:22 HKT 2005

在 05-8-11,limodou<limodou at gmail.com> 写道:
> 在 05-8-11,jjyoung<hellopython at 126.com> 写道:
> >
> > class Matrix(object):
> >
> >  def __init__(self, numberOfRows, numberOfColumns):
> >  assert numberOfRows >= 0
> >  assert numberOfColumns >= 0
> >   super(Matrix, self).__init__()
> >  self._numberOfRows = numberOfRows
> >  self._numberOfColumns = numberOfColumns
> > 请问第五行什么意思?
> >
> > ps:
> > 我查过关于super的文档,但是还不大懂。
> 
> super是用在New Style Class中调用父类的方法的安全形式。classic class的调用是:
> 
> class A:
>     def p(self):pass
> class B(A):
>     def p(self):
>         A.p(self)
>         #B中的处理
> 
> 但是这样可能会有问题,那就是多重继续中的"钻石形状"问题(详情请参考python.org上的关于New Style
> class的文档),因此为了在New Style
> Class中解决引入了super方法,它可以安全地进行处理。因此它需要传入类名,用来帮助查找应调用的父类。
> 
精彩!都象禅问了!哈哈哈!!
下次CPUG就讲一讲懂的 New Style Class 吧!
大家可能平时没有时间和动力来研究Python语言本身的,有研究过的就分享出来!
对比其它语言就更加明白 Pythonic 之美了!

"钻石形状"问题
C++ 是通过不同父类中函式的参数类型来匹配;
JAVA,C# 是根本不敢玩这个
PHP通过伪装父类实例来进行
Ada? Lisp?...


-- 
[Time is unimportant, only life important!]

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月15日 星期一 11:35

Bruce Wang number5 at gmail.com
Mon Aug 15 11:35:11 HKT 2005

On 8/11/05, Zoom Quiet <zoom.quiet at gmail.com> wrote:
> 在 05-8-11,limodou<limodou at gmail.com> 写道:
> > 但是这样可能会有问题,那就是多重继续中的"钻石形状"问题(详情请参考python.org上的关于New Style
> > class的文档),因此为了在New Style
> > Class中解决引入了super方法,它可以安全地进行处理。因此它需要传入类名,用来帮助查找应调用的父类。
> >
> 精彩!都象禅问了!哈哈哈!!
> 下次CPUG就讲一讲懂的 New Style Class 吧!
> 大家可能平时没有时间和动力来研究Python语言本身的,有研究过的就分享出来!
> 对比其它语言就更加明白 Pythonic 之美了!
> 
> "钻石形状"问题
> C++ 是通过不同父类中函式的参数类型来匹配;
> JAVA,C# 是根本不敢玩这个
> PHP通过伪装父类实例来进行
> Ada? Lisp?...
> 
什么样的问题需要用多重继承/钻石形状啊?Interface? 可不可以举个例子来说

-- 
simple is good

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月15日 星期一 11:58

limodou limodou at gmail.com
Mon Aug 15 11:58:13 HKT 2005

> 什么样的问题需要用多重继承/钻石形状啊?Interface? 可不可以举个例子来说
> 

多重继承在Python中的使用是非常多的。比如wxPython中的排序listCtrl,它是由wxListCtrl和ColumnSorterMixin两个基类生成。但钻石继承的情况我是没有见过,但作为多重继承却是必需要可以正确处理的。

在NewEdit中许多类如槽类都是多重继承的。

-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号