在学习python的过程中,我遇到了isinstance函数,但它的行为与我预期的不同。尽管将实例及其类作为参数,它仍然返回false
我浏览了这个网站和其他一些网站,但我没有找到任何关于我的确切情况。我已经用python3.7.3测试过了
我就是这么用的:
class bird:
def fly():
print("all birds fly.")
class owl(bird):
def hoot():
print("owls hoot.")
my_owl=owl
my_owl.fly()
my_owl.hoot()
print(isinstance(my_owl, owl))
print(isinstance(owl, my_owl))
我颠倒了实例和类参数的顺序,只是为了确保首先覆盖了所有的基。根据我阅读的教程,isinstance应该在上面两种情况之一返回True(特别是第一种情况,但在两种情况下都返回false)。 提前谢谢
以下是正确的代码:
解释如下:
self
为第一个参数,除非它是static method(但在本例中,应该声明为第一个参数)李>isinstance
应将对象作为第一个参数,将类(或元组或类)作为第二个参数。您的第二个isinstance
调用将返回TypeError
my_owl = Owl()
。如果不这样做,my_owl
将不会引用Owl对象,而是引用Owl的类定义李>my_owl=owl
使my_owl
成为owl
类的别名,而不是owl
的实例。您需要添加括号:创建一个实例,之后
isinstance(my_owl, owl)
将工作一旦你这么做了,你会有其他的问题。您需要将显式的} decorator 装饰它们(因此它们不需要
self
参数添加到fly
和hoot
方法(否则它们不是有效的实例方法),或者,用the ^{self
,但是可以在类和类的实例上调用)相关问题 更多 >
编程相关推荐