68 isinstance( ) 和 issubclass( ) 方法

93次阅读
没有评论

共计 1210 个字符,预计需要花费 4 分钟才能阅读完成。

一. isinstance(obj,cls)

1.isinstance() 与 type()

  • 检查一个 对象 (obj) 是否是 类(cls) 实例出来的
class Foo1:
    def __init__(self):
        self.name = " 派大星 "

class Foo2:
    def __init__(self):
        self.name = " 海绵宝宝 "

f1 = Foo1()
f2 = Foo2()

print(isinstance(f1,Foo1))  # True
print(isinstance(f2,Foo1))  # False
  • type() 判断传入对象的类型
print(type([1,2.3]) == list)    # True
print(type(33) is int)          # True
print(type(3.5) in (int,float)) # True

2. 不同之处

  • isinstance 它可以判断带有 继承关系 的类的对象
  • type 只能判断所属类的对象
class Foo1:
    def __init__(self):
        self.name = " 派大星 "

class Foo2(Foo1):
        name = " 海绵宝宝 "

f1 = Foo1()
f2 = Foo2()

print(isinstance(f2,Foo2))  # True
print(isinstance(f2,Foo1))  # True

print(type(f2) is Foo2)     # True
print(type(f2) is Foo1)     # False

3. 注意

  • 不能说哪一种方法更好, 只能说哪一个更合适

二. issubclass(sub,super)

  • 检查 sub 类是否是 super 类的派生类(孙子类, 重孙子类...)
🍔多继承
class Foo1:
    def __init__(self):
        self.name = " 章鱼哥 "

class Bar1:
    def run(self):
        print(" 快跑 ")

class Bar2(Bar1,Foo1):
    def run(self):
        print(" 快跑 ")

class Bar3:
    def speak(self):
        print(" 快说 ")

print(issubclass(Bar2,Foo1))  # True
print(issubclass(Bar2,Bar1))  # True
print(issubclass(Bar3,Bar1))  # False

🍔多层继承 (父类 ---> 父类)
class Foo1:
    def __init__(self):
        self.name = " 章鱼哥 "

class Bar1(Foo1):
    def run(self):
        print(" 快跑 ")

class Bar2(Bar1):
    def run(self):
        print(" 快跑 ")

class Bar3(Bar2):
    def speak(self):
        print(" 快说 ")

print(issubclass(Bar3,Foo1))  # True
print(issubclass(Bar3,Bar1))  # True
print(issubclass(Bar3,Bar2))  # True
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计1210字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)