码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象基础(二)

时间:2019-11-14 13:45:58      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:第一个   参数   class   ini   obj   func   子类   中继   父类   

# 例:#  写三个类: 狗,猫,鸡, 每个类中都有 吃 喝  自己的方法  最后定义一个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在进行查找时,每查一个类节点它都会与后面的类链进行比较,发现有重合的类节点时,它会放弃当前类链,向后查找,它的计算方式不详细介绍
# 经典类深度优先不太多介绍,一条类链走到底然后查下一条类链

 

面向对象基础(二)

标签:第一个   参数   class   ini   obj   func   子类   中继   父类   

原文地址:https://www.cnblogs.com/tengx/p/11856501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!