美文网首页
11面向对象二

11面向对象二

作者: 无敌帅帅头 | 来源:发表于2019-02-24 17:41 被阅读0次

    一.析构函数

    # __del__方法,只要这个对象在内存中即将被消灭的时候,就会调用这个方法

    class Person(object):

        def __init__(self):

            self.name ='zhiliao'

            print('这是构造函数')

        def greet(self):

            print('我的名字是%s' %self.name)

        def __del__(self):

            print('这是析构函数')

            p = Person()

            p.greet()

    #二.应用在文件读写操作

    class Person(object):

        def __init__(self):

            self.name ='zhiliao'

            print('这是构造函数')

            self.fp =open('***.txt','w')

        def greet(self):

            print('我的名字是%s' %self.name)

        def write(self,message):

            self.fp.write(message)

        def __del__(self):

            print('这是析构函数')

               p = Person()

               p.greet()

               p.write('eee')

    二.继承

    #封装/继承/多态

    #继承

    #父类/基类

    class Person(object):

        def __init__(self,name,age):

            self.name = name

            self.age = age

        def eat(self):

            print('人在吃饭')

        def walk(self):

            print('人在走路')

    class Student(Person):

            pass

            s = Student('zhiliao',26)

            s.eat()

            s.walk()

            print(s.name)

            print(s.age)

    三.重写父类方法

    class Person(object):

        def __init__(self,name,age):

            self.name = name

            self.age = age

        def eat(self):

            print('人在吃饭')

    class Student(Person):

    #1.如果父类的需求满足不了子类的需求,那么可以重写这个方法,以后对象调用同名方法的时候

        #就只会执行子类的这个方法

        #2.虽然父类的方法不能完全满足子类的需求,但是父类的方法的代码需要执行,那么可以通过supper

        #这个函数来调用父类的方法

        #supper的用法,supper(类名,self).方法名([参数])

        def __init__(self,name,age):

            super(Student,self).__init__(name,age)

            print('学生初始化方法')

        def eat(self):#重写eat方法

            print('学生在吃饭')

        def greet(self):

            print('my name is %s,my age is %d'%(self.name,self.age))

    s = Student('zhiliao',26)

    s.eat()

    s.greet()

    四.子类不能继承父类的方法

    #子类不能继承父类的私有属性和方法

    class Person(object):

        def __init__(self,name):

            self.__name = name

            self._age =22

        def greet(self):

            print('my name is %s'%self.__name)

        def __run(self):

            print('person is run')

     class Student(Person):

        def sgreat(self):

           # print('my name is %s'%self.__name)

            print('my age is %d'%self._age)

            #  self.__run

    p = Student('xuxu')

    p.sgreat()

    五.多继承及其注意事项

    #python3当中不存在旧事类,全部都为新式类

    #多继承

    class ma(object):

    def run(self):

    print('马仔奔跑')

    def eat(self):

    print('马在吃草')

    class lu(object):

    def eat(self):

    print('驴在拉磨')

    print('lu在吃麦杆')

    class luozi(ma,lu):

    def eat(self):

    #如果不想通过__mro__的顺序执行父类的方法,

            #那么可以通过以下方式执行lu.eat()

            lu.eat(self)#调用驴中的方法,指定调用

            # super(luozi,self).eat()#这种按照mro那种方式执行顺序继承

            print('骡子再吃谷物')

    pass

    lz = luozi()

    # lz.run()

    # lz.luo()

    # lz.eat()

    print(lz.__mro__)

    相关文章

      网友评论

          本文标题:11面向对象二

          本文链接:https://www.haomeiwen.com/subject/bqkdyqtx.html