Python3 面向对象——继承,重写,类属性与方法

来源:互联网 发布:中软国际php培训怎么样 编辑:程序博客网 时间:2024/06/08 18:03

**

继承,重写,类属性与方法

继承 :

继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
继承有两个角色父类与子类,就像现实生活中的父亲与子女的继承。
首先请看下面的代码:

class jicheng:  #创建一个类    def __init__(self):  # 构造方法        print("jicheng")class jichang1:    def __init__(self,a):        print("jicheng1",a)class jicheng2(jichang1,jicheng):  # jicheng2继承了jicheng和jicheng1    def __init__(self,a):        super(jicheng2,self).__init__(a) #使用super函数找到类jicheng2 从左到右第一个父类,然后执行他的构造方法。        jicheng.__init__(self)#直接使用父类点构造方法        print("jicheng2")d = jicheng2("123")

结果:

jicheng1 123jichengjicheng2

出上面可以看出一个类继承另一个类只需要在一个类上加括号里面写父类的名称就可以了,如果需要多继承就加逗号后面继续写父类名称。执行父类的方法使用父类名点方法就可以。super函数也可以实现相同的功能。子类是可以带参数给父类的方法的。


接下来看这段代码:

class jicheng:    def aa(self):        print("123123")    def __init__(self):        print("jicheng")class jichang1:    def aa(self):        print("123123213131")    def __init__(self,a):        print("jicheng1",a)class jicheng2(jichang1,jicheng):    def __init__(self,a):        print("jicheng2")d = jicheng2("123")

结果:

jicheng2

可以看出子类继承父类在执行子类时子类并不会自动输出父类的构造方法。

重写:

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法,重写方法名相同,实例如下:

class Parent:        # 定义父类   def myMethod(self):      print ('调用父类方法')class Child(Parent): # 定义子类   def myMethod(self):      print ('调用子类方法')c = Child()          # 子类实例c.myMethod()         # 子类调用重写方法

结果:

调用子类方法

类属性与方法 :

类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法
在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods。
这些是类的私有属性和方法我就不举例了
类的专有方法:

__init__ : 构造函数,在生成对象时调用__del__ : 析构函数,释放对象时使用__repr__ : 打印,转换__setitem__ : 按照索引赋值__getitem__: 按照索引获取值__len__: 获得长度__cmp__: 比较运算__call__: 函数调用__add__: 加运算__sub__: 减运算__mul__: 乘运算__div__: 除运算__mod__: 求余运算__pow__: 乘方

这些都是类的专有方法我们就举例一下

class person:    def __init__(self,name=None,age=None):        self.name =name        self.age=age    def __str__(self):        return "我是{0},今年{1}岁".format(self.name,self.age)    def __add__(self, other):        return person(self.name+other.name,self.age+other.age)    def __lt__(self, other):        if self.name == other.name:            return  other.age < self.age        else:            return self.name< other.namep=person(name="张三",age=19)p1=person(name="张三",age=19)print(p+p1)ps=[person("zhangsan",19),person("lisi",16),person("zhangsan",21),person("wangwu",23),]print("-----------未排序-----------------")for p1 in ps:    print(p1)print("-----------排序后-----------")for p1 in sorted(ps):    print(p1)

结果:

我是张三张三,今年38岁-----------未排序-----------------我是zhangsan,今年19岁我是lisi,今年16岁我是zhangsan,今年21岁我是wangwu,今年23岁-----------排序后-----------我是lisi,今年16岁我是wangwu,今年23岁我是zhangsan,今年21岁我是zhangsan,今年19岁

这是一个简单排序张三张三和18 18 可以使用add这个相加。

阅读全文
1 0
原创粉丝点击