English 中文(简体)
如何输入一个变量的提示, 它必须是在 Python 中的等级或子类的示例?
原标题:How to Type Hint a variable that must be an instance of a class or of its subclasses in Python?
Let s say that I have a class Animal and some subclasses of Animal like Dog and Cat. I want to type hint a variable named a in order to declare that it can be both an Animal s instance or one of the subclass of Animal instance. Example of me trying to type hint : class Animal : pass class Dog(Animal) : pass class Cat(Animal) : pass a : type[Animal] = Dog() #But could have been Animal() or Cat() As you can see I have been using this syntax : type[ParentClassName] . However, as I have read on the typing documentation, type[ParentClassName] is for a class and not instances of a class (see : https://docs.python.org/3/library/typing.html#typing.Type). (Note that type[ClassName] is the same as typing.Type[ClassName] since Python 3.9) The main focus of the type hint I m searching for is the fact that it can be both an Animal s instance or a Dog/Cat s instance while being mypy friendly. So is there a way to do this by type hinting ? Sorry for any mistakes, english isn t my first language. And thanks to anyone who will try to answer my question.
最佳回答
Firstly my goal was to have a way to declare that my variable a is an Animal. However my concern was that if a become an instance of Dog , even if Dog inherit from Animal, would a still be considered an Animal. The answer is yes and so the way to declare it with type hint is : class Animal : pass class Dog(Animal) : pass a: Animal = Dog() In fact the reason why it s correct come from the Subtype relationships notion described in PEP 483 (see : https://peps.python.org/pep-0483/#subtype-relationships). Thanks to Brian61354270 and juanpa.arrivillaga for their answers.
问题回答

暂无回答




相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签