Python 中的“类型”和“对象”有什么区别?

这个问题已经有了一个答案:

  • Python中的元类是什么?14答案

我偶然发现这条巨蟒文献资料在super关键词:

如果省略了第二个参数,则返回的超级对象将被解除绑定。如果第二个参数是对象,则isinstation(obj,type)必须为true。如果第二个参数是类型,则issubclass(type 2,type)必须是true(这对于classMethod很有用)。

有人能给我一个例子,说明将Type作为第二个参数传递与传递对象之间的区别吗?

文档是在谈论对象的实例吗?

谢谢。

Python的super函数根据参数的不同来做不同的事情。下面是使用它的不同方法的演示:

class Base(object):
    def __init__(self, val):
        self.val = val

    @classmethod
    def make_obj(cls, val):
        return cls(val+1)

class Derived(Base):
    def __init__(self, val):
        # In this super call, the second argument "self" is an object.
        # The result acts like an object of the Base class.
        super(Derived, self).__init__(val+2)

    @classmethod
    def make_obj(cls, val):
        # In this super call, the second argument "cls" is a type.
        # The result acts like the Base class itself.
        return super(Derived, cls).make_obj(val)

测试输出:

>>> b1 = Base(0)
>>> b1.val
0
>>> b2 = Base.make_obj(0)
>>> b2.val
1
>>> d1 = Derived(0)
>>> d1.val
2
>>> d2 = Derived.make_obj(0)
>>> d2.val
3

这个3结果是前一个修饰符的组合:1(从Base.make_obj)加2(来自Derived.__init__ ).

请注意,可以调用super只有一个论点来获得一个“未绑定”的超级对象,它显然没有多大用处。没有真正的理由这样做,除非你想搞乱Python内部和你真的知道你在做什么。

在Python 3中,您还可以调用super没有参数(这相当于提供当前类和self作为两个论点,但更神奇)。

我还有许多干货带给你们,干货主要有:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤    Python所有知识点汇总(可以弄清楚Python的所有方向和技术)

*如果你用得到的话可以直接拿走,在我的QQ技术交流群里,可以自助拿走,群号是1046656332

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值