Can Python 3.x enforce that a method param is a specific class instance/object? (ala PHP)
python是动态类型化的,没有对方法参数进行类型暗示的规定。但是,PHP也是动态类型的,它有一个类型的规定,暗示方法参数至少是一个类的实例(或者它是从定义的类继承的类的实例)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Foo() { public function __construct($qux, ...) { $this->qux = qux; ... } } public class Bar() { //"Type Hinting" done here enforcing // that $baz is an instance of Foo public function __construct(Foo $baz, ...) { $this->baz = $baz; ... } } |
是否有类似的方法来强制方法param是Python中的特定实例?
如果不是,是否有适当的惯例可以简单地断言?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Foo(object): def __init__(self, qux=None, ...): self.qux = qux ... class Bar(object): def __init__(self, baz=None, ...): #"Type Hinting" done here as `assert`, and # requires catch of AssertionError elsewhere assert isinstance(baz, Foo) self.baz = baz ... |
如果这是使用
不是开箱即用。但是,您可以将参数注释与函数修饰器结合起来,几乎可以轻松地编写自己的注释。
但是,请记住,duck类型的整个思想是为了避免这种逻辑。
在python中有一个很强的约定来接受duck类型习惯,在本例中,这意味着您可以从
如果试图访问对象不支持的属性,则会引发
1 2 3 4 | try: baz.foo except AttributeError: # handle the exception |
涉及此主题的其他一些问题
- 检查函数参数类型是pythonic吗?
- 参数类型检查python
- 鸭子打字的生产率提高
- Python中的EAFP原理是什么?