课程目标
- 继承
- 多态
- 类型判断
继承
• 定义一个class的时候,可以从某个现有的class继承,新的
class称为子类(Subclass)
• 被继承的class称为基类、父类或超类(Base class、Super
class)
多态
• 代码运行时才确定对象的具体类型
类型判断
• type() #判断一些基础属性
• isinstance() #有继承属性的 判断属于哪个类
• dir() #获得一个对象的所有属性和方法
```python
class Animal(object):
def run(self):
print('Animal is running')
class Dog(Animal):
pass
class Cat(Animal):
pass
dog = Dog()
dog.run()
class Dog(Animal):
# 重写 继承的好处:可以通过复写的对继承过来的东西进行修改
def run(self):
print('Dog is running')
def eat(self):
print('eat meat')
class Cat(Animal):
def run(self):
print('Cat is running')
def eat(self):
print('eat fish')
dog = Dog()
dog.run()
'''
多态
'''
b = Animal()
c = Dog() #c是Dog类型
print(isinstance(b,Animal))
print(isinstance(c,Dog))
#c 既可以是Animal 也可以是Dog
print(isinstance(c,Animal))
#调用run_twice 方法。需要传递Animal类的对象或者Animal的子类
def run_twice(animal):
animal.run()
animal.run()
run_twice(Dog())
run_twice(Cat())
'''
类型判断
'''
import types
def fn():
pass
print(type(fn)==types.FunctionType)
#判断是否内置函数
print(type(abs)==types.BuiltinFunctionType)
# getattr(),setattr(),hasattr()
class MyObject(object):
def __init__(self):
self.x = 9
def power(self):
return self.x * self.x
obj = MyObject()
# obj 有属性'x'吗?
print(hasattr(obj,'x'))
print(obj.x)
print(hasattr(obj,'y'))
#设置一个属性'y'
setattr(obj,'y',19)
print(hasattr(obj,'y'))
print(getattr(obj,'y'))
#dir()
print(obj.__dir__())
小结
• Python3以后所有对象都是继承与object类 • 继承可以让子类继承父类的方法和属性
• Python作为动态语言支持对象的动态绑定
• 通过type和isinstance方法来判断对象类型