#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()并不是实例化了一个父类对象出来,其实想想也知道,如果是多继承,它要怎么去实例化?