python类总结 (封装、继承、多态)


总结了下面向对象的三大特性

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: linghanchujian

# python类
# 类模板
"""
class class_module:
    # 私有属性
    __name = "name"
    def __init__(self):
        print("----------构造函数------")
        print("----------初始化调用函数")
        pass
    # 私有方法
    def __mian(self):
        pass
    def __del__(self):
        print("------析构函数----")
        print("------实例不使用或程序退出时调用!!")
        pass
"""

# ofo类实例
class ofo:
    name = "Linghanchujian"
    def __init__(self,name="name",age=22):
        self.name = name
        self.age = age
        pass

    def __del__(self):
        print("ofo类结束")
        pass

# r = ofo()
#
# print(r.name,r.age)

# 继承
print("---------------------------------------------继承----------------------------")
class class_inherit(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age
        pass

    def eat(self):
        print("{name} is eating...".format(name = self.name))
        pass

    def sleep(self):
        print("%s is sleeping..."%self.name)
        pass
    pass

class class_sub(class_inherit):
    def __init__(self,name,age,sex):
        # super(class_sub,self).__init__(name,age)
        class_inherit.__init__(self,name,age) #super(class_sub,self).__init__(name,age) 等同
        self.sex = sex
        pass

    def Sub(self):
        print("name:%s , age:%s , sex:%s "%(self.name,self.age,self.sex))
        pass

    def eat(self):
        class_inherit.eat(self)
        print("classSub sex:%s"%self.sex)
        pass
    pass

u = class_sub("Linghanchujian",22,"")
u.eat()
u.sleep()
u.Sub()

# 多继承
class class_inherit2(object):
    def inherit(self,obj):
        print("%s love %s"%(self.name,obj.name))
        pass
    pass

class class_sub2(class_inherit,class_inherit2):
    pass

m1 = class_sub2("Linghanchujian",22)
m2 = class_sub2("weiwuxingxuan",22)
m1.inherit(m2)

# python2.x 中经典类的继承是深度优先,新式类是广度优先
# python3.x 中同一为广度优先

# 继承方式为
# inherit父类
# sub and sub2 --继承-->inherit
# sub_sub --继承--> sub and sub2
#
# 初始化方式(前提inherit、sub、sub2、sub_sub类中只有一个__init__方法)
# python2.x经典类初始化顺序 深度优先
# sub_sub --> sub --> inherit --> sub2
# python2.x 新式类 和 python3.x 同一为广度优先
# sub_sub --> sub --> sub2 --> inherit

class inherit: #经典类
    def __init__(self):
        print("my name is class_inherit3!!")
        pass
    pass

class inherit2(object):#新式类
    def __init__(self):
        print("my name is class_inherit4!!")
        pass
    pass

class sub(inherit):
    def __init__(self):
        print("my name is sub")
        pass
    pass

class sub2(inherit):
    def __init__(self):
        print("my name is sub2")
        pass
    pass

class sub_sub(sub,sub2):
    def __init__(self):
        print("my name is sub_sub")
        pass
    pass


# 多态
print("---------------------------------------------多态----------------------------")
class Animal(object):
    def __init__(self,name):
        self.name = name
        pass

    def eat(self):
        print("%s is eating..."%self.name)
        pass

    @staticmethod
    def Animal_eat(obj):
        obj.eat()
        pass
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass

m1 = Dog("m1")
m2 = Cat("m2")

Animal.Animal_eat(m1)
Animal.Animal_eat(m2)

下面是运行结果

---------------------------------------------继承----------------------------
Linghanchujian is eating...
classSub sex:男
Linghanchujian is sleeping...
name:Linghanchujian , age:22 , sex:男 
Linghanchujian love weiwuxingxuan
---------------------------------------------多态----------------------------
m1 is eating...
m2 is eating...

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM