Python面向对象学习(一)

继承

    关于继承,就是儿子获得了父亲的东西

# class Animal:
# 当没有写父类时,默认继承自object
class Animal(object):
    def __init__(self, name):
        self.name = name

    def run(self):
        print('小动物喜欢一天到晚跑个不停')
        
# 定义一个子类,继承自Animal  
class Dog(Animal):
    pass

d = Dog('旺财')
# 可以直接拥有父类的属性
print(d.name)
# 也拥有父类的行为
d.run()


派生

    关于派生,就是儿子除了获取父亲拥有的所有的东西以外,还拥有独属于自己的东西,例:

class Animal:
    def run(self):
        print('一天到晚跑个不停')

class Cat(Animal):
    def eat(self):
        print('猫喜欢吃鱼')



在这里 子类Cat 继承了父类Animal的所有方法,但是eat这个方法是子类独有的,这就是派生


重写

关于重写,相当于儿子继承了父亲的一栋房子,这个时候儿子对这个房子会有集中情况:

  1. 某一间房子对他完全没有用,这个时候就需要把他推掉,重新盖一个对自己有用的了   
 class Animal:
        def run(self):
            print('小动物喜欢到处跑')

            
    class Cat(Animal):
        # 父类方法完全不合适,覆盖重写
        def run(self):
            print('猫喜欢走猫步')

就像这样,父类(Animal)中的run方法对子类(Cat)完全不合适,子类就将这个run方法覆盖重写

2. 某一间房子对他有用,但是还需要加一些东西才完美,这样就需要在原有的基础上加一点东西

    class Animal:

        def eat(self):
            print('小动物喜欢吃东西')
            
    class Cat(Animal):

    	# 父类的方法不够完善,需要添加完善
    	def eat(self):
            # 保留父类方法的内容
            # Animal.eat(self)    # 不建议使用
            # super(Cat, self).eat()
            super().eat()           # 推荐使用
            # 添加完善的内容
            print('猫喜欢吃鱼')   
    就像这样,父类(Animal)中的eat方法对子类(Cat)有用,但是子类还需要完善一点,在原父类方法的基础上继续加点东西使用


多继承 

关于多继承,意思就是一个人可以继承多个人的东西。


class A:
    def test(self):
        print('in class A  func test...')
        
class B:
    def test(self):
        print('in class B  func test...')

    def eat(self):
        print('in class B func eat ...')   
        
class C(A, B):
    def eat(self):
        # 默认的方式找父类,跟不重写方法时的顺序是一样的,
        # 按照书写的先后顺序,默认是写在前面的类的方法
        # super().eat()
        # 明确指定调用哪个父类的方法
        B.eat(self)

就像这样,一个类可以继承多个类,但是如果继承的这几个类中有相同方法名的方法时,会根据传入的先后顺序进行调用的,如果不想按顺序使用的话,需要在C这个类中新建一个相同的方法,在方法中特别指明调用的哪个父类的方法


本博客所有文章如无特别注明均为原创。作者:止语复制或转载请以超链接形式注明转自 止语
原文地址《Python面向对象学习(一)

相关推荐

网友评论(0)