我可以在Python中使用类方法来获取此类的类型的参数吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以在Python中使用类方法来获取此类的类型的参数吗?相关的知识,希望对你有一定的参考价值。

我想指出,某些方法采用相同类型的参数,就像这个函数一样。

我试着通过动物的例子来解释

class Animal:
    def __init__(self, name : str):
        self.name = name

    def say_hello(self, animal: Animal):
        print(f"Hi {animal.name}")

类型为str的名称没有任何问题,但Animal无法识别:

NameError: name 'Animal' is not defined

我使用PyCharm和Python 3.7

答案

使用typing.NewType定义一个类型并从中继承:

from typing import NewType

AnimalType = NewType('AnimalType', object)

class Animal:
    def __init__(self, name: str):
        self.name = name

    def say_hello(self, animal: AnimalType):
        print(f"Hi {animal.name}")
另一答案

类名称不可用,因为此时尚未定义。从Python 3.7开始,您可以通过在任何导入或代码之前添加此行来启用对注释的推迟评估(PEP 563):

from __future__ import annotations

或者,您可以使用字符串注释,大多数类型的检查器都应该识别它,包括内置在PyCharm中的那个:

class Animal:
    def __init__(self, name: str):  # this annotation can be left as a class
        self.name = name

    def say_hello(self, animal: 'Animal'):  # this one is itself a string
        print(f"Hi {animal.name}")

以上是关于我可以在Python中使用类方法来获取此类的类型的参数吗?的主要内容,如果未能解决你的问题,请参考以下文章

内部类的使用类型

python中获取子窗口的句柄

在Java中,如果返回类型分别是原始类型及其包装类,是不是可以覆盖方法?

Java学习之单例模式

JVM

[Python]-8-对象与类(中)