继承类

继承:

ClassB类为例 ClassB继承了ClassA, 所以ClassB可以使用ClassA的方法。

在下面这个例子中 ClassA被称为:基类,父类(Base class) ClassB被称为:派生类,子类

  1. class ClassA(object):
  2. def func():
  3. print("this is classA")
  4. class ClassB(ClassA):
  5. pass
  6. obj = ClassB()
  7. obj.func()
  1. # 输出结果
  2. #=======================================
  3. this is classA

修改:

当派生类对基类方法、属性从新修改过后, 则派生类会以当前类中的方法、属性为准

  1. class ClassA(object):
  2. def func():
  3. print("this is classA")
  4. class ClassB(ClassA):
  5. def func():
  6. print("this is classB")
  7. obj = ClassB()
  8. obj.func()
  1. # 输出结果
  2. #=======================================
  3. this is classB

访问控制

注意:基类的私有部分是无法被派生类直接使用的(不能访问) (如果尝试范围,Python会返回AttributeError异常)

  1. class ClassA(object):
  2. def __funcA(self):
  3. print("this is FunctionA")
  4. def funcB(self):
  5. print("this is FunctionB")
  6. class ClassB(ClassA):
  7. def funcC(self):
  8. self.funcB()
  9. try:
  10. self.__funcA() # 派生类无法访问基类的私有部分
  11. except AttributeError:
  12. print("AttributeError")
  13. obj = ClassB()
  14. obj.funcC()
  1. # 输出结果
  2. #=======================================
  3. this is FunctionB
  4. AttributeError

访问基类的私有部分

虽然不建议这么做,但还是演示一下

  1. class ClassA(object):
  2. __var = "this is classA"
  3. class ClassB(ClassA):
  4. def func(self):
  5. print(self._ClassA__var)
  6. obj = ClassB()
  7. obj.func()
  1. # 输出结果
  2. #=======================================
  3. this is classA

类查询


判断类型:isinstance( )

使用isinstance函数,可以判断对象的类

  1. class ClassA(object):
  2. def func(self):
  3. print("this is classA")
  4. class ClassB(ClassA):
  5. def func(self):
  6. print("this is classB")
  7. objB = ClassB()
  8. objA = ClassA()
  9. print("ClassB is ClassB:",isinstance(objB, ClassA))
  10. print("ClassB is ClassA:",isinstance(objB, ClassB))
  11. print("ClassA is ClassA:",isinstance(objA, ClassA))
  12. print("ClassA is ClassB:",isinstance(objA, ClassB))
  1. # 输出结果
  2. #=======================================
  3. ClassB is ClassB: True
  4. ClassB is ClassA: True
  5. ClassA is ClassA: True
  6. ClassA is ClassB: False

查询类型:type( )

使用type函数,可以查询对象的类

  1. class ClassA(object):
  2. __var = "this is classA"
  3. class ClassB(ClassA):
  4. def func(self):
  5. print(self._ClassA__var)
  6. objA = ClassA()
  7. objB = ClassB()
  8. print(type(objA))
  9. print(type(objB))
  1. # 输出结果
  2. #=======================================
  3. <class '__main__.ClassA'>
  4. <class '__main__.ClassB'>

查询属性及方法:dir( )

可以查询对象中所有的 属性及方法(包括派生来的)

QQ截图20210128020938.png

  1. class ClassA(object):
  2. def func(self):
  3. print("ClassA")
  4. class ClassB(ClassA):
  5. def funcA(self):
  6. print("funcA")
  7. def funcB(self):
  8. print("funcB")
  9. var = 10
  10. obj = ClassB()
  11. for i in dir(obj):
  12. print(i)
  1. __class__
  2. __delattr__
  3. __dict__
  4. __dir__
  5. __doc__
  6. __eq__
  7. __format__
  8. __ge__
  9. __getattribute__
  10. __gt__
  11. __hash__
  12. __init__
  13. __init_subclass__
  14. __le__
  15. __lt__
  16. __module__
  17. __ne__
  18. __new__
  19. __reduce__
  20. __reduce_ex__
  21. __repr__
  22. __setattr__
  23. __sizeof__
  24. __str__
  25. __subclasshook__
  26. __weakref__
  27. func
  28. funcA
  29. funcB
  30. var