python特训营-继承和多态

课程目标

  1. 继承
  2. 多态
  3. 类型判断

继承
• 定义一个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方法来判断对象类型

猜你喜欢

转载自blog.csdn.net/weixin_42873348/article/details/107592097