python - Python 3.x 可以强制方法参数是特定的类实例/对象吗? (阿拉 PHP)

标签 python python-3.x parameter-passing type-hinting

Python 是动态类型的,没有对方法参数进行类型提示的规定。然而,同样是动态类型的 PHP,确实有一个类型提示的规定,即方法参数至少是一个类的实例(或者它是一个从类继承的类的实例)定义的类)。

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;
        ...
    }
}

是否有类似的方法来强制方法参数是 Python 中的特定实例?

如果不是,那么简单地断言是正确的约定吗?

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
        ...

如果这是使用 assert 的风格是不正确/不优雅/“不是 pythonic”,我应该怎么做?

最佳答案

不是开箱即用的。但是,您可以合并 parameter annotations使用函数装饰器几乎可以毫不费力地编写自己的装饰器。

但是请记住,duck typing 的整个概念就是要避免这种逻辑。

关于python - Python 3.x 可以强制方法参数是特定的类实例/对象吗? (阿拉 PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23071213/

相关文章:

python - 在没有提升权限的情况下调用二进制文件

python - 如何在 python 中创建菜单并使用函数作为我的选项?

python - 如何在预测中结合静态特征和时间序列

python - 添加可能包含 'None' 条目的数组

python - 套接字聊天室 - python 3.7

python - 拖动 Canvas 时获取当前值

python - 你如何表达一个没有参数的 Python Callable?

R - 函数参数中的椭圆 (`...` ) 和 `NULL`

c++ - 如何将 multimap 传递给函数

C#7 'in' 允许运算符重载的参数