继承类
继承:
ClassB类为例 ClassB继承了ClassA, 所以ClassB可以使用ClassA的方法。
在下面这个例子中 ClassA被称为:基类,父类(Base class) ClassB被称为:派生类,子类
class ClassA(object):def func():print("this is classA")class ClassB(ClassA):passobj = ClassB()obj.func()
# 输出结果#=======================================this is classA
修改:
当派生类对基类方法、属性从新修改过后, 则派生类会以当前类中的方法、属性为准
class ClassA(object):def func():print("this is classA")class ClassB(ClassA):def func():print("this is classB")obj = ClassB()obj.func()
# 输出结果#=======================================this is classB
访问控制
注意:基类的私有部分是无法被派生类直接使用的(不能访问) (如果尝试范围,Python会返回AttributeError异常)
class ClassA(object):def __funcA(self):print("this is FunctionA")def funcB(self):print("this is FunctionB")class ClassB(ClassA):def funcC(self):self.funcB()try:self.__funcA() # 派生类无法访问基类的私有部分except AttributeError:print("AttributeError")obj = ClassB()obj.funcC()
# 输出结果#=======================================this is FunctionBAttributeError
访问基类的私有部分
虽然不建议这么做,但还是演示一下
class ClassA(object):__var = "this is classA"class ClassB(ClassA):def func(self):print(self._ClassA__var)obj = ClassB()obj.func()
# 输出结果#=======================================this is classA
类查询
判断类型:isinstance( )
使用isinstance函数,可以判断对象的类
class ClassA(object):def func(self):print("this is classA")class ClassB(ClassA):def func(self):print("this is classB")objB = ClassB()objA = ClassA()print("ClassB is ClassB:",isinstance(objB, ClassA))print("ClassB is ClassA:",isinstance(objB, ClassB))print("ClassA is ClassA:",isinstance(objA, ClassA))print("ClassA is ClassB:",isinstance(objA, ClassB))
# 输出结果#=======================================ClassB is ClassB: TrueClassB is ClassA: TrueClassA is ClassA: TrueClassA is ClassB: False
查询类型:type( )
使用type函数,可以查询对象的类
class ClassA(object):__var = "this is classA"class ClassB(ClassA):def func(self):print(self._ClassA__var)objA = ClassA()objB = ClassB()print(type(objA))print(type(objB))
# 输出结果#=======================================<class '__main__.ClassA'><class '__main__.ClassB'>
查询属性及方法:dir( )
可以查询对象中所有的 属性及方法(包括派生来的)
class ClassA(object):def func(self):print("ClassA")class ClassB(ClassA):def funcA(self):print("funcA")def funcB(self):print("funcB")var = 10obj = ClassB()for i in dir(obj):print(i)
__class____delattr____dict____dir____doc____eq____format____ge____getattribute____gt____hash____init____init_subclass____le____lt____module____ne____new____reduce____reduce_ex____repr____setattr____sizeof____str____subclasshook____weakref__funcfuncAfuncBvar

