在django.utils.functional.py:
for t in type(res).mro(): # <----- this
if t in self.__dispatch:
return self.__dispatch[t][funcname](res, *args, **kw)
Run Code Online (Sandbox Code Playgroud)
我不明白mro().它是做什么的,"mro"是什么意思?
如果之前有人问过这个问题,但我找不到任何相关的答案,请原谅我。
考虑一个将数字类型作为输入参数的函数:
def foo(a):
return ((a+1)*2)**4;
Run Code Online (Sandbox Code Playgroud)
这适用于整数、浮点数和复数。
是否有基本类型,以便我可以进行类型提示(真实现有类型/基类),例如:
def foo(a: numeric):
return ((a+1)*2)**4;
Run Code Online (Sandbox Code Playgroud)
此外,我需要在集合类型参数中使用它,例如:
from typing import Collection;
def foo(_in: Collection[numeric]):
return ((_in[0]+_in[1])*2)**4;
Run Code Online (Sandbox Code Playgroud) 我想允许使用Python 3的类型提示来接受某个类的子类.例如:
class A:
pass
class B(A):
pass
class C(A):
pass
def process_any_subclass_type_of_A(cls: A):
if cls == B:
# do something
elif cls == C:
# do something else
Run Code Online (Sandbox Code Playgroud)
现在输入以下代码时:
process_any_subclass_type_of_A(B)
Run Code Online (Sandbox Code Playgroud)
我得到一个PyCharm IDE提示'预期类型A,而不是类型[B].
如何在此处更改类型提示以接受A的任何子类型?
根据这个(https://www.python.org/dev/peps/pep-0484/#type-definition-syntax,"该参数也接受其类型是特定参数类型的子类型的表达式.") ,我明白我的解决方案(cls: A)应该有效吗?
我定义一个类如下:
from numbers import Number
from typing import Dict
from typeguard import typechecked
Data = Dict[str, Number]
@typechecked
class Foo:
def __init__(self, data: Data):
self._data = dict(data)
@property
def data(self) -> Data:
return self._data
Run Code Online (Sandbox Code Playgroud)
我在用typeguard。我的目的是限制可以进入数据字典的类型。显然,typeguard如果将整个字典传递给函数或从函数返回,则会检查整个字典。如果字典直接“暴露”,那么检查类型就成为字典的“责任”——这显然是行不通的:
bar = Foo({'x': 2, 'y': 3}) # ok
bar = Foo({'x': 2, 'y': 3, 'z': 'not allowed'}) # error as expected
bar.data['z'] = 'should also be not allowed but still is ...' # no error, but should cause one
Run Code Online (Sandbox Code Playgroud)