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这个相加。
- Python3 面向对象——继承,重写,类属性与方法
- Python3.5基础——面向对象与继承
- Java面向对象5——类的继承与权限控制,重写与super
- 基于.NET 4面向对象编程高级主题(一):类的继承与方法重写
- PHP基础----面向对象相关特性----12类的继承与方法重写
- 面向对象的特征之—继承(方法重载 vs 方法重写)
- 面向对象特征——继承及重写
- python-对象、私有属性_方法、继承(多重继承)、重写
- 类与对象 类的分类 方法 继承 重写
- Python3.5——面向对象——类的继承和多态
- java面向对象的继承以及方法重写和重载
- 39_面向对象_12_继承_方法的重写
- Python面向对象编程(4)——类的继承与方法重载
- 达内课程-面向对象之继承与重写
- 40_面向对象_13_继承_Object类用法_toString和equals方法_重写toString
- 面向对象——句柄类与继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- 数学笔记8——最值问题
- 机器学习技法课程学习笔记1 -- Linear Support Vector Machine
- offer15
- IPC机制系列之二 IPC机制的基础概念Serializable、Parcelable以及Binder
- 网站统计中的数据收集原理及实现-埋点统计
- Python3 面向对象——继承,重写,类属性与方法
- IIS网站本机可以访问但局域网其他机器无法访问 解决方法
- Idea 右菜单窗口 Maven
- C++在win32实现读写锁
- mac 中 将Pdf文件转kindle格式mobi文件教程
- (zhuan)富文本 Attributes 下划线、删除线等
- 求字符串最后一个单词的长度
- 安装numpy笔记
- stm32在rt-thread上的SysTick(系统定时器)