继承类
继承:
ClassB类为例 ClassB继承了ClassA, 所以ClassB可以使用ClassA的方法。
在下面这个例子中 ClassA被称为:基类,父类(Base class) ClassB被称为:派生类,子类
class ClassA(object):
def func():
print("this is classA")
class ClassB(ClassA):
pass
obj = 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 FunctionB
AttributeError
访问基类的私有部分
虽然不建议这么做,但还是演示一下
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: True
ClassB is ClassA: True
ClassA is ClassA: True
ClassA 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 = 10
obj = 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__
func
funcA
funcB
var