sna*_*ile 176 python assert subclass
假设我有一套西装和四个西装子类:Heart,Spade,Diamond,Club.
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
Run Code Online (Sandbox Code Playgroud)
我有一个接收套装作为参数的方法,它是一个类对象,而不是一个实例.更确切地说,它可能只收到四个值中的一个:Heart,Spade,Diamond,Club.我怎样才能做出确保这样的事情的断言?就像是:
def my_method(suit):
assert(suit subclass of Suit)
...
Run Code Online (Sandbox Code Playgroud)
我正在使用Python 3.
小智 200
你可以issubclass()像这样使用assert issubclass(suit, Suit).
Dav*_*nan 26
isinstance如果您有实例,或者issubclass您有课程,则可以使用.通常认为这是个坏主意.通常在Python中,如果一个对象能够通过尝试对其执行某些操作来解决问题,则可以解决问题.
Cir*_*四事件 13
issubclass最小可运行示例
这是一个包含一些断言的更完整的示例:
#!/usr/bin/env python3
class Base:
pass
class Derived(Base):
pass
base = Base()
derived = Derived()
# Basic usage.
assert issubclass(Derived, Base)
assert not issubclass(Base, Derived)
# True for same object.
assert issubclass(Base, Base)
# Cannot use object of class.
try:
issubclass(derived, Base)
except TypeError:
pass
else:
assert False
# Do this instead.
assert isinstance(derived, Base)
Run Code Online (Sandbox Code Playgroud)
在 Python 3.5.2 中测试。
根据Python doc,我们还可以使用class.__mro__属性或class.mro()方法:
class Suit:
pass
class Heart(Suit):
pass
class Spade(Suit):
pass
class Diamond(Suit):
pass
class Club(Suit):
pass
>>> Heart.mro()
[<class '__main__.Heart'>, <class '__main__.Suit'>, <class 'object'>]
>>> Heart.__mro__
(<class '__main__.Heart'>, <class '__main__.Suit'>, <class 'object'>)
Suit in Heart.mro() # True
object in Heart.__mro__ # True
Spade in Heart.mro() # False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87521 次 |
| 最近记录: |