摘自https://www.cnblogs.com/evablogs/p/6724477.html

继承

1
2
3
4
5
6
7
8
class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
class Student(Person):
   def __init__(self, name, gender,score):                        #score属性是子类自己的属性
        super(Student,self).__init__(name,gender)                 #super(子类名称,self).__init__(继承父类的属性1,属性2):初始化父类,继承Person父类的name和gender属性
        self.score=score

除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。

多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#哪类人
class Person(object):
    pass
 
class Student(Person):
    pass
 
class Teacher(Person):
    pass
 
class SkillMixin(object):
    pass
 
#技能类
class BasketballMixin(SkillMixin):
    def skill(self):
        return 'basketball'
 
class FootballMixin(SkillMixin):
    def skill(self):
        return 'football'
 
#拥有哪种技能的人的类型
class BStudent(Student, BasketballMixin):                               #既是学生,又会打篮球的人,即继承学生类,也继承篮球技能类,多重继承
    pass
 
class FTeacher(Teacher, FootballMixin):
    pass
 
s = BStudent()
print s.skill()
 
>>> basketball
 
t = FTeacher()
print t.skill()
>>> football

多态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Person(object):
     def __init__(self,name):
          self.name=name
     def a(self):                                               #Person父类的a方法
          return 'I am a Person,my name is %s' %self.name
class Student(Person):
      def __init__(self,name,age):
           super(Student,self).__init__(name)
           self.age=age
      def a(self):                                              #Student子类的a方法
          return 'I am a Student,my name is %s' %self.name   
class Teacher(Person):
      def __init__(self,name,score):
           super(Teacher,self).__init__(name)
           self.score=score
      def a(self):                                              #Teacher子类的a方法
          return 'I am a Teacher,my name is %s' %self.name   
def show_a(x):                                                  #定义一个方法,用于接收x参数,返回每个类实例对象相对应的方法
     print a()
 
 
p=Person('Bob')
s=Student('Alice',12)
t=Teacher('Lily',80)
 
 
结果:
>>> show_a(p)
I am a Person,my name is Bob
 
>>> show_a(s)
I am a Student,my name is Alice
 
>>> show_a(t)
I am a Teacher,my name is Lily
 
结果返回子类自己的方法,但当子类的方法找不到时会顺着子类找到父类相对应的方法

封装

将细节封装起来提供一个接口被访问,有效地保证了细节的安全。

1
2
3
4
5
6
7
8
9
class Person(object):
      def __init__(self):
           self.__name='a'
     @property                                   #使用@property将一个方法name变成属性,可以直接.name访问
      def name(self):                            #封装self.__name属性
           return self.__name                   
 
p1=Person()
p1.name                                          #p1.name可以直接访问name方法

python类的继承、封装和多态的更多相关文章

  1. Python类的继承(进阶5)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6411918.html 本文出自:[Edwin博客园] Python类的继承(进阶5) 1. python中什 ...

  2. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  3. python基础之继承原理,多态与封装

    1.什么是继承? 继承是一种创建新的类的方式.class A: passclass B: pass2.如何继承---->如何寻找继承关系 现实生活中找继承关系是自下而上,在程序中写是自上而下继承 ...

  4. python类的继承和多态,获取对象信息

    继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(se ...

  5. python 类定义 继承

    0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...

  6. 记录Python类与继承的一个错误

    今天在学python的类与继承的时候遇到一个错误,原来是自己在ctrl+c  ctrl+v的时候漏了一个括号 class Car(): def __init__(self,make,year,mode ...

  7. Python 类的继承__init__() takes exactly 3 arguments (1 given)

    类(class),可以继承基类以便形成具有自己独特属性的类,我们在面向对象的编程中,经常用到类及其继承,可以说没有什么不是类的,今天我们就来详细探讨一下在python中,类的继承是如何做的. 我们假设 ...

  8. day30 python类的继承,抽象类等

    Python之路,Day17 = Python基础17-面向对象入门 继承 class Student(People): pass print(Student.__bases__) # 查看 Stud ...

  9. python类、继承

    Python 是一种面向对象的编程语言.Python 中的几乎所有东西都是对象,拥有属性和方法.类(Class)类似对象构造函数,或者是用于创建对象的"蓝图". 一.python ...

  10. python类的继承、多继承及其常用魔术方法

    继承 一个类可以派生出一个子类,这个子类可以使用父类的属性及方法,也可以在父类的基础上添加自己的独特属性或方法.属性和方法的继承的顺序是先从自己开始,找不到再去找父类,父类没有再找父类的父类,其尽头就 ...

随机推荐

  1. 关于thinkphp5手动抛出Http异常时自定义404页面报错的问题

    在使用HttpException手动抛出异常时,希望跳转到自定义的错误页面,官方的文章中是这样描述的. 可以使用\think\exception\HttpException类来抛出异常 // 抛出 H ...

  2. CODING 敏捷实践完全指南

    你好,欢迎使用 CODING! 这份最佳实践将帮助你掌握 CODING 敏捷管理工具,更好地实践敏捷开发流程. 更多实践案例持续更新中 什么是敏捷研发 敏捷研发是涉及整个软件工程的理念与实践,它的核心 ...

  3. 安卓开发笔记(十九):异步消息处理机制实现更新软件UI

    主界面代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andr ...

  4. 关于IT公司技术委员会职责

    技术委员会的核心职责 组织人才相关 • 制定职级标准 - 能力框架:知识,技能,通用素质 - 职级标准:T2T3T4-P7P8P9- • 职级评审,对齐标准 • 高端招聘,对齐标准 • 校园招聘,对齐 ...

  5. 不一样的 SQL Server 日期格式化

    不一样的 SQL Server 日期格式化 Intro 最近统计一些数据,需要按天/按小时/按分钟来统计,涉及到一些日期的格式化,网上看了一些文章大部分都是使用 CONVERT 来转换的,SQL Se ...

  6. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  7. Oracle设置主键自增

    oracle没有mysql那样可以有自增主键,需要自己通过创建序列才能实现自增 /*创建自增序列*/ CREATE SEQUENCE CMB_CHINA_CITYS_ID MINVALUE --最小值 ...

  8. JNI实战(三):JNI 数据类型映射

    在JNI实战(二):Java 调用 C 我们了解了JNI的静态注册和动态注册.也知道我们应该使用动态注册来进行JNI函数与Java方法之间的映射. 示例的映射表的数组为如下: static JNINa ...

  9. 解决MUI阻止a标签默认跳转事件—方法总结

    用过mui的小伙伴们一定不会陌生,有时候真的很烦mui本身会阻止a标签默认跳转.一般只要用了mui的ui组件,比如头部,底部或者弹框,你就不能在用a标签进行跳转了. 注:项目中引用了mui后,可能也会 ...

  10. 腾讯短信服务精简版(PHP )

    短信视乎已经被慢慢淡出平常的交流工具队列,但始终抹不去它的存在,短信验证码视乎从未被取代,此外在重要的信息通知的地位也是不可取的的.所以了解短信的使用是开发中很有必要的一环. 腾讯云的短信服务提供有1 ...