pythonsuper原理_每天学一点python 40---super1

#0831

#研究了一天django国际化的东西,没有结果,window上没问题,部署到服务器上就不能好好显示翻译结果,在源码上打print,发现了一些区别,但还是不太懂国际化的原理,苦手。。

接下来我们将试着讨论super

super在之前很多地方都有使用到,metaclass 、new、type等等,可以说是学习python绕不去的一道坎,或许不深究对于写简单业务代码没啥影响,但是不懂还是很膈应。我们会这样使用super

class a:

def say(self):

print('hello')

class b(a):

def say(self):

print('ni hao')

a().say()

b().say()

>>>

hello

ni hao

子类重写了父类的同名方法,有时候需要继承一下父类的方法,再加上自己的内容,比如有些初始化是在父类做的,不好重写

class a:

def say(self):

print('hello')

class b(a):

def say(self):

super().say()

print('ni hao')

a().say()

b().say()

>>>

hello

hello

ni hao

我原来自学的时候,老师说这个super()就是用来调用父类的方法的,哦,好像就这么简单,那岂不是

def say(self):

a().say()

print('ni hao')

这样吗?输出

hello

hello

ni hao

也一样嘛。但是super的作用就是实例化出来一个父类的对象吗,我们打印一下

def say(self):

super().say()

a().say()

print(super())

print(a())

print('ni hao')

>>>

, >

<__main__.a object at 0x000000B115DB7518>

显然是不同的,而且这个输出,既不是打印实例时的输出,也不是打印类名的输出。所以这个到底是什么

print(dir(super()))

>>>

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__self_class__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__thisclass__']

并看不出来什么,我们看到了熟悉的new方法

但我们至少粗浅的知道,super()并不是实例化了一个父类对象出来,其实想想也知道,如果是多继承,它要怎么去实例化?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值