• 面向对象基础(二)


    # 例:#  写三个类: 狗,猫,鸡, 每个类中都有 吃 喝  自己的方法  最后定义一个Animal类,
    
    class Animal:
        def __init__(self,name,sex,age):
            self.name = name
            self.sex = sex
            self.age = age
    
        def eat(self,option):
            print('%s 在吃 %s' %(self.name,option))
    
        def drink(self,option):
            print('%s 在喝 %s' %(self.name,option))
    
    # 以下两个类继承了Animal
    
    class Cat(Animal):
        def miaow(self):
            print('MM')
    
    class Person(Animal):
        def work(self):
            print('Working')
    
    
    
    c1 = Cat('MM','Wom','Tom')
    
    c1.eat('')
    # result:MM 在吃 鱼
    # 可以根据查找链获取到继承来的字段和方法包括构造函数
    # 只执行父类的方法:子类中不要定义与父类同名的方法
    # 只执行子类的方法:在子类创建这个方法.
    # 那么如果我们既要执行子类又要继承父类呢?比如Cat类的实例需要一个特殊的属性hair
    class Cat(Animal):
        def __init__(self,name,sex,age,hair):
            # hair属性是子类独有的第一种方式
            Animal.__init__(self,name,sex,age)
            self.hair = hair
    
        def miaow(self):
            print('MM')
    
    
    c1 =  Cat('MM','Wom','Tom','blue')
    print(c1.hair)
    # result:blue,这种方法非常少见通常都是使用python中的super方法
    class Cat(Animal):
        def __init__(self,name,sex,age,hair):
            # hair属性是子类独有的第一种方式
            super().__init__(name,sex,age)
            #等同于 super(Cat, self).__init__(name, sex, age)
            # super当中两个参数第一个参数传入子类,第二个参数是实例对象,当他调用父类中方法时会自动将self传入
            self.hair = hair
    
    
        def miaow(self):
            print('MM')
    
    
    c1 =  Cat('MM','Wom','Tom','blue')
    print(c1.hair)
    #类分为新式类与经典类,在python3中都是新式类
    # 在python中继承Objct的类都叫做新式类,python2默认是经典类,我们手动继承Objct则转换为新式类
    # 新式类和经典类的区别在于多继承
    # 新式类广度优先又称钻石查找,经典类遵循深度优先
    # 例:
    class A:
        def func(self):
            print('A')
    
    class B(A):
        pass
        # def func(self):
        #     print('B')
    
    class C(A):
        pass
        # def func(self):
        #     print('C')
    
    class D(B):
        pass
        # def func(self):
        #     print('D')
    
    class E(C):
        pass
        # def func(self):
        #     print('E')
    
    
    class F(E,D,C):
        pass
        # def func(self):
        #     print('F')
    
    o1 = F()
    
    print(F.mro())
    # result:[<class '__main__.F'>, <class '__main__.E'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
    # 我们从查找顺序上能够得出广度优先的算法
    # 在新式类中python在进行查找时,每查一个类节点它都会与后面的类链进行比较,发现有重合的类节点时,它会放弃当前类链,向后查找,它的计算方式不详细介绍
    # 经典类深度优先不太多介绍,一条类链走到底然后查下一条类链
  • 相关阅读:
    Opengl绘制我们的小屋(二)第一人称漫游
    C# this.Invoke和this.BeginInvoke 最简单的写法
    C# 递归模型定义。赋值
    .net Core 2.1 后 Session保存,新页面获取不到值
    .net core mvc 错误信息显示 ModelState.AddModelError
    .net Core 依赖注入 Add********说明
    C# 中2个问号的作用。C#的??代表是什么意思
    asp.net mvc 加三层架构 完美搭配
    C# DataTable.Compute()用法
    C# DateTime判断时间
  • 原文地址:https://www.cnblogs.com/tengx/p/11856501.html
Copyright © 2020-2023  润新知