手记

python 面向对象02

python 面向对象02

面向对象三大特性:封装、继承、多态


封装:隐藏实现细节,对外提供方法调用


继承:代码的重用性


多态:同一个方法,不同实例对象调用,结果不一样


python 支持多继承(一个类,有多个父类)

说明:当不同的父类中出现同名方法时,识别靠前类中的方法。


所有类默认继承:object 类


定义子类时,必须调用父类的构造函数。


class Person:


    def __init__(self, name, age):

        self.name = name

        self.__age = age


    def say_age(self):

        print(self.name, "的年龄是:", self.__age)



class Student(Person):

    def __init__(self, name, age, score):

        self.score = score

        Person.__init__(self, name, age)  # 构造函数中包含调用父类构



s1 = Student("张三", 15, 85)

s1.say_age()

print(dir(s1))


继承

子类继承父类所有成员(继承了并不一定能用)


重写

特:重写是在继承的基础之上。没有类之间的继承关系,就没有重写。


重写定义:父类中的方法,子类在调用时发现,无法满足子类需求,子类对该方法进行了重新定义。

class Person:


    def __init__(self, name, age):


        self.name = name

        self.age = age



def say_age(self):

    print(self.name, "的年龄是:", self.age)



def say_name(self):

    print("我是", self.name)



class Student(Person):


    def __init__(self, name, age, score):

        self.score = score

        Person.__init__(self, name, age)  # 构造函数中包含调用父类构造函数



def say_score(self):

    print(self.name, "的分数是:", self.score)



def say_name(self):  # 重写父类的方法

    print("报告老师,我是", self.name)



s1 = Student("张三", 15, 85)

s1.say_score()

s1.say_age()

s1.say_name() # 关注该方法调用,输出的结果


类的继承结构

类.mro()


dir() 查看对象属性


自定义类跟object类对比

class Person:


    def __init__(self, name, age):

        self.name = name

        self.age = age


    def say_age(self):

        print(self.name, "的年龄是:", self.age)



obj = object() # 语法里面是定义了object 类的

print(dir(obj))


s2 = Person("高淇", 18)

print(dir(s2))



重写__str__()方法


class Person:

    def __init__(self, name, age):

        self.name = name

        self.__age = age



def __str__(self):

    return "名字是:{0},年龄是{1}".format(self.name, self.__age)



p = Person("高淇", 18)

print(p)



super()


class A:


    def say(self):

        print("A: ", self)

        print("say AAA")



class B(A):


    def say(self):

        super().say()  # 通过 super()调用父类的方法

        print("say BBB")



b = B()

b.say()


多态


方法被不同对象调用结果不同


class Animal:

    def shout(self):

        print("动物叫了一声")



class Dog(Animal):

    def shout(self):

        print("小狗,汪汪汪")



class Cat(Animal):

    def shout(self):

        print("小猫,喵喵喵")



def animalShout(a):

    if isinstance(a, Animal):

        a.shout()



animalShout(Dog())

animalShout(Cat())


0人推荐
随时随地看视频
慕课网APP