Python3.x能否强制方法param是一个特定的类实例/对象?(阿拉巴马州)

Python3.x能否强制方法param是一个特定的类实例/对象?(阿拉巴马州),python,python-3.x,parameter-passing,type-hinting,Python,Python 3.x,Parameter Passing,Type Hinting,Python是动态类型的,没有关于方法参数的类型暗示的规定。然而,同样是动态类型的PHP确实有一个类型暗示的规定,即方法参数至少是一个类的实例,或者它是从定义的类继承的类的实例 公开课Foo { 公共函数uuu构造$qux。。。 { $this->qux=qux; ... } } 公共类酒吧 { //在这里输入提示 //$baz是Foo的一个实例 公共功能uuu constructFoo$baz。。。 { $this->baz=$baz; ... } } 有没有类似的方法来强制方法param是P

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

公开课Foo { 公共函数uuu构造$qux。。。 { $this->qux=qux; ... } } 公共类酒吧 { //在这里输入提示 //$baz是Foo的一个实例 公共功能uuu constructFoo$baz。。。 { $this->baz=$baz; ... } } 有没有类似的方法来强制方法param是Python中的特定实例

如果不是,那么简单地断言是否合适

类对象: 定义初始自我,qux=None,…: self.qux=qux ... 类对象: 定义初始自我,baz=None,…: 在此处键入“assert”作为提示,然后 需要在别处捕获断言错误 断言isinstancebaz,Foo self.baz=baz ...
如果这是一种使用assert的风格,它是不正确的/不雅观的/不是pythonic的,那么我应该怎么做呢?

不是现成的。然而,您可以与函数装饰器结合,几乎毫不费力地编写自己的函数


但是,请记住,的整个想法是避免这种逻辑。

不是现成的。然而,您可以与函数装饰器结合,几乎毫不费力地编写自己的函数


但是,请记住,的整个想法是避免这种逻辑。

Python中有一种很强的习惯用法,即在本例中,这意味着您可以从baz对象调用适当的属性,而无需显式检查其类型。这有很多好处,包括更好地支持多态性和更可读/更少冗长的代码

如果试图访问对象不支持的属性,则会引发AttributeError异常。因此,您可以将其放在try/except块中,并在适当的时候捕获任何AttributeError—这是另一种Python习惯用法的特征,称为

涉及此主题的其他一些问题


Python中有一个很强的习惯用法,在本例中,这意味着您可以从baz对象调用适当的属性,而无需显式检查其类型。这有很多好处,包括更好地支持多态性和更可读/更少冗长的代码

如果试图访问对象不支持的属性,则会引发AttributeError异常。因此,您可以将其放在try/except块中,并在适当的时候捕获任何AttributeError—这是另一种Python习惯用法的特征,称为

涉及此主题的其他一些问题


我想提出一个TypeError异常,但你的代码看起来不错。。。尽管要知道isinstance对于所有Foo的子实例都是真的,但是您可以通过执行typebaz==Foo在Foo上没有括号来强制执行Foo实际上Pythonic要做的事情是使用duck类型;如果该值有效,则不管它是否是您期望的类型,都让它运行。这就是为什么我们谈论像文件一样的对象、序列等等——它们是预期的协议,Java会称之为接口,尽管语言中没有指定它们。不过,语言中内置了一个类型约束;self-on方法是类型检查的。今天我建议使用MyPy检查类型注释。我会引发一个TypeError异常,但您的代码看起来不错。。。尽管要知道isinstance对于所有Foo的子实例都是真的,但是您可以通过执行typebaz==Foo在Foo上没有括号来强制执行Foo实际上Pythonic要做的事情是使用duck类型;如果该值有效,则不管它是否是您期望的类型,都让它运行。这就是为什么我们谈论像文件一样的对象、序列等等——它们是预期的协议,Java会称之为接口,尽管语言中没有指定它们。不过,语言中内置了一个类型约束;self-on方法是类型检查的。今天我建议使用MyPy检查类型注释。
try:
    baz.foo
except AttributeError:
    # handle the exception