1、面向对象的概念

拥有共同属性的一类进行归类的过程叫做面向对象。

2、注意事项

class定义类的时候,类名的首字母必须大写

3、面向对象案例

 1 class Person(object):
2 def __init__(self,name,age): #name,age可以理解为类的属性;init为初始化;类里定义的函数称为构造方法/构造函数
3 self.name=name #实例属性
4 self.age=age
5 print("start")
6 def __del__(self): #清理操作
7 print("end")
8 def show(self): #self为类本身,不可省略
9 print("name:{0},age:{1}".format(self.name,self.age))
10 obj=Person(name="wuya",age=18) #要调用类里边的变量、方法函数等,首先需要对类进行实例化;obj是类Person()实例化后的对象,类实例化的过程也是类初始化的过程。类的实例化过程也是针对构造方法初始化的过程(等于调用了__init__的方法)
11 obj.show()
12 #Person(name="wuya",age=18).show() #用类名调用方法

以上代码运行的结果为:

4、类中方法的执行顺序:初始化方法->具体的方法->清理的方法

5、面向对象的特性

1)封装

  a.实例属性

  b.数据属性(类中的变量)

2)继承

3)多态

6、方法:

  a.普通方法:属于对象,也属于类,只能读写;

  b.特性方法:属于对象,只具备读属性,方法不能有形式参数;

  c.静态方法:属于类,只能用类名来调用,一般把数据属性使用静态方法来处理

7、封装入门实例

 1 class Animal(object):
2 def __init__(self,age):
3 self.age=age
4 def getAge(self):
5 return self.age
6 def setAge(self,age):
7 if age>10 and age<100:
8 self.age=age #允许修改年龄
9 else:
10 print("年龄错误")
11 objAnimal=Animal(age=25) #类的实例化
12 print(objAnimal.getAge()) #输出获取年龄的方法的调用结果
13 objAnimal.setAge(age=11) #调用修改年龄的方法
14 print(objAnimal.getAge()) #输出获取年龄的方法的调用结果

8、封装的进阶实例

 1 class Animal(object):
2 address="地球" #数据属性
3 def __init__(self,age):
4 self.age=age #实例属性
5 # @staticmethod
6 def address(self): #静态方法,数据属性使用静态方法来处理
7 return "地球"
8 def show(self,name="❀"): #普通方法,可读写
9 print("it come from {0},and it's age is {1},and it's name is {2}".format(self.address(),self.age,name))
10 def func(self,**kwargs):
11 print(kwargs)
12 @property
13 def info(self): #特性方法,只读(只有输出)
14 print("hello world")
15 @property
16 def getAge(self): #特性方法,只读(只有返回)
17 return self.age
18 objAnimal=Animal(age=30) #类的实例化
19 objAnimal.show() #调用普通方法
20 #objAnimal.show(name="monkey")
21 # Animal().show(name="monkey")
22 # Animal(age=10).address()
23 objAnimal.func(name="cch",age=18,city="西安")
24 objAnimal.info #特性方法调用
25 print(Animal.address(""))
26 print(objAnimal.age)

 9、继承

1)概念

父类(基类):被继承的类

子类(派生类):继承其他的类

2)Java和Python继承的区别

Java是单继承的,Python是多继承的

3)子类继承父类的什么:

a、变量(数据属性)

b、实例属性

c、方法

3)方法重写

当父类的方法没有办法满足子类的需求的时候,子类就会重写父类的方法,那么子类实例化后的对象调用该方法,优先考虑的是子类的方法。

 1 class Father(object):
2 address="西安"
3 def __init__(self,name,age):
4 self.name=name
5 self.age=age
6 def info(self):
7 print("this is a father's method")
8 class Son(Father):
9 def __init__(self,name,age,score):
10 Father.__init__(self,name,age) #子类继承了父类的实例属性
11 self.score=score
12 def show(self):
13 print("name is {0},and age is {1},and score is {1}".format(self.name,self.age,self.score))
14 def info(self): #父类的方法重写
15 print("this is a son's method")
16 son=Son(name="wuya",age=18,score=99)
17 son.show()
18 print(son.address) #子类继承了父类的变量(数据属性)
19 son.info() #不用print,info()中有print,函数与返回值时,输出函数为空。子类重写父类的方法,那么子类实例化后的对象调用该方法,优先考虑的是子类的方法。

以上代码运行的结果为:

 10、继承顺序

1)从上到下(前提条件):

a.单个继承

b.子类重写了父类的方法

2)从左到右(前提条件):子类继承多个类(子类可以继承多个父类,但父类之间必须是同级关系。)

3)所以在Python中,基于MRO的解析顺序规则,就会从左到右开始查找基类,如果找到第⼀个匹配的属性类,就会停⽌查找,如果没有,那就继续查找,直到查找到符合要

求的为止。MRO其实就是通过⼀个C3线性化算法来实现的,它的核心思想为:

子类会优于父类检查

多个父类会根据他们在列表中的顺序被依次检查

如果对下一个类存在两个合法的选择,只能选择第一个(线性查找)

11、继承顺序示例

 1 class Father(object):
2 def __init__(self,name,age):
3 self.name=name
4 self.age=age
5 def funM(self):
6 print("father")
7
8 class Mother(object):
9 def funM(self):
10 print("mother")
11
12 class Son(Father,Mother): #子类Son继承了两个父类
13 def __init__(self,name,age,score):
14 Father.__init__(self,name,age) #子类Son继承了父类Father和Mother的实例属性
15 self.score=score
16
17 son=Son(name="ccj",age=18,score=100)
18 son.funM()
19 print(Son.mro()) #使用类名调用mro,查看类的执行顺序

以上代码的执行结果为:

12、子类继承多个非同级的父类错误示例

 1 class Person(object):
2 pass
3
4 class Father(Person):
5 def __init__(self):
6 pass
7 def funM(self):
8 print("father")
9 class Mother(object):
10 def funM(self):
11 print("mother")
12
13 class Son(Person,Father): #子类继承的多个父类不是同一级,代码会报错,z子类可以继承多个父类,但父类之间必须是同级关系。
14 def __init__(self,score): 15 Father.__init__(self) 16 self.score=score 17 son=Son(score=90) 18 son.funM() 19 print(Son.mro())

以上代码的运行结果为;

 13、继承方法调用错误示例

 1 class Person(object):
2 pass
3
4 class Father(Person):
5 def __init__(self):
6 pass
7
8 class Mother(Person):
9 def funM(self):
10 print("mother")
11
12 class Son(Father): #子类继承的父类中没有funM方法,代码会报错
13 def __init__(self,score):
14 Father.__init__(self)
15 self.score=score
16
17 son=Son(score=99)
18 son.funM()

以上代码的运行结果为:

14、继承方法调用错误示例纠正

 1 class Person(object):
2 def funM(self):
3 print("person")
4
5 class Father(Person):
6 def __init__(self):
7 pass
8
9 class Mother(Person):
10 def funM(self):
11 print("mother")
12
13 class Son(Father): #子类继承法的父类是Father
14 def __init__(self,score):
15 Father.__init__(self)
16 self.score=score
17
18 son=Son(score=99)
19 son.funM() #子类调用方法,先从子类中查找,再从继承的父类查找,若未找到,再从父类的父类中查找。
20 print(Son.mro())

以上方法的运行结果为:

15、继承历史问题

python2是深度优先,python3是广度优先

 1 class A:
2 def show(self):
3 print('A')
4
5 class B(A):
6 pass
7
8 class C(A):
9 def show(self):
10 print('C')
11
12 class D(B,C):
13 pass
14
15 if __name__ == '__main__':
16 obj=D()
17 obj.show() #python2执行的结果是A,pyhton3中的运行结果为C

16、多态

多太的优势具体可以总结为如下几点,具体为:

增加了持续的灵活性

增加了持续的额外扩展功能

 1 class Animal(object):
2 def talk(self):
3 print("动物会叫")
4
5 class Dog(object):
6 def talk(self):
7 print("狗也会叫")
8
9 class Cat(object):
10 def talk(self):
11 print("猫也会叫")
12
13 def func(animal):
14 animal.talk()
15 if __name__ == '__main__':
16 dog=Dog()
17 func(animal=dog)

以上代码的运行结果为:

python 基础知识-day10(面向对象)的更多相关文章

  1. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  2. python 基础知识(一)

    python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...

  3. python基础知识小结-运维笔记

    接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...

  4. Python基础知识(Basic knowledge)

    Python基础知识(Basic knowledge) 1.认识Python&基础环境搭建 2.Python基础(上) 3.Python基础(中) 4.Python基础(下) 5.Python ...

  5. python基础知识的学习和理解

    参考链接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base   python基础知识笔 ...

  6. python基础知识(二)

    以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍

  7. python基础知识讲解——@classmethod和@staticmethod的作用

    python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...

  8. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  9. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

随机推荐

  1. 9.Jenkins进阶之流水线pipeline基础使用实践(2)

    目录一览: 0x01 基础实践 0x02 进阶实践 (1) Sonarqube 代码质量检测之 Pipeline Script from SCM (2) Gitlab 自动触发构建之 Pipeline ...

  2. 学习打卡——Mybatis—Plus

    今天看完了Mybatis-Plus的视频,在某些方面来看MP确实简化了很多操作,比如自动生成代码等等.学习过程的代码实例也到同步到了gitee和github

  3. Java学习day12

    Set集合特点:不能包含重复的元素:没有所有的方法,不能通过普通的for循环遍历集合 哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值,同一个对象多次调用hashCode()方法 ...

  4. Java 从零开始实现一个画图板、以及图像处理功能,代码可复现

    Java 从零开始实现一个画图板.以及图像处理功能,代码可复现 这是一个学习分享博客,带你从零开始实现一个画图板.图像处理的小项目,为了降低阅读难度,本博客将画图板的一步步迭代优化过程展示给读者,篇幅 ...

  5. JavaScript学习基础2

    ##JavaScript基本对象 1 .function:函数(方法)对象 * 创建: 1.var fun =new Function(形式参数,方法体): 2.function 方法名(参数){ 方 ...

  6. 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

    1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...

  7. Java汽车租赁系统[源码+数据库]

    系统名称 Java汽车租赁系统   (源码在文末) 系统概要 汽车租赁系统总共分为两个大的模块,分别是系统模块和业务模块.其中系统模块和业务模块底下又有其子模块. 功能模块 一.业务模块 1.客户管理 ...

  8. 【CSAPP】Architecture Lab 实验笔记

    archlab属于第四章的内容.这章讲了处理器体系结构,就CPU是怎样构成的.看到时候跃跃欲试,以为最后实验是真要去造个CPU,配套资料也是一如既往的豪华,合计四十多页的参考手册,一大包的源码和测试程 ...

  9. 原创工具14Finger-全能web指纹识别与分享平台

    14Finger 功能齐全的Web指纹扫描和分享平台,基于vue3+django前后端分离的web架构,并集成了长亭出品的rad爬虫的功能,内置了一万多条互联网开源的指纹信息. Github:http ...

  10. 图文详解 HDFS 的工作机制及其原理

    大家好,我是大D. 今天开始给大家分享关于大数据入门技术栈--Hadoop的学习内容. 初识 Hadoop 为了解决大数据中海量数据的存储与计算问题,Hadoop 提供了一套分布式系统基础架构,核心内 ...