class Base:
def func(self):
print('base.func')
super().func() # 执行mro的下一个类中的func
class Foo:
def func(self):
print('foo.func')
class Bar(Base, Foo):
pass
o = Bar()
o.func()
运行结果
base.func
foo.func
def func(string: arg): # arg指定了只能传string
arg.send()
# java的多态局限性:arg可以是string对象也可以是string的派生类的对象。
# 而python中可以是任意对象
面向对象的应用场景
面向对象中classmethod和staticmethod区别
@classmethod
@staticmethod
共同点:都通过类调用,不用通过对象就可调用,staticmethod可以没有参数,classmethod至少有个个参数:类。
面向对象的成员修饰符
面向对象的成员
class Foo:
a = 123 # 类变量/静态字段、静态数据
def __init__(self):
self.name = 'Lau' # 实例变量/字段/属性
def func(self): # 方法/绑定方法:绑定到类中的方法
pass
@classmethod
def func(cls): # 类方法
pass
@staticmethod
def func(): # 静态方法
pass
@property
def json(self): # 属性
return ...
一般不能相加,如:
class F:
pass
class B:
pass
o1 = F()
o2 = B()
r = o1 + o2
运行结果
r = o1 + o2
TypeError: unsupported operand type(s) for +: 'F' and 'B'
增加__add__方法
class F:
def __init__(self, num):
self.num = num
def __add__(self, other):
return self.num + other.num
class B:
def __init__(self, num):
self.num = num
o1 = F(2)
o2 = B(4)
r = o1 + o2 # 执行o1中的__add__方法,把后面对象当做参数传进去,
print(r) # >>>6
一旦请求进来,run_simple中的第三个参数self就会加括号,也就是对象加括号执行这个对象的__call__方法
django:
有些框架如果依赖wsgi,请求入口都比较相似。