python对象的独有功能与面向对象的特征
- 目录
- 对象的独有功能
- 动静态方法
- 面向对象的特征
- 面向对象的的三大特征
- 继承的本质
- 不继承的名字查找顺序
- 单继承的名字查找顺序
- 多继承的名字查找顺序
- 经典类与新式类
- 派生方法
- 对象的独有功能
1.定义:绑定在类中的函数(每个被类创造出的对象所使用类中的方法从而获得不同数据)
class Computer:
name = '电脑' def price(self, model):
print(f'{model}电脑便宜出售') com1 = Computer()
com2 = Computer()
com1.price('联想') # 联想电脑便宜出售
com2.price('苹果') # 苹果电脑便宜出售
- 动静态方法
1.绑定给对象的方法,直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入
2.绑定给类的方法类 调用则有几个形参就传几个实参
3.静态方法(普通函数)
class Computer:
name = '电脑' def price(self, model):
print(f'{model}电脑便宜出售{self}') # self <__main__.Computer object at 0x0000015A98BBE048> @classmethod
def func(cls, type):
print(f'{type}电脑性能很好{cls}') # cls <class '__main__.Computer'> @staticmethod
def exterior(type):
print(f'{type}电脑外观好看') com1 = Computer()
com2 = Computer()
com1.price('联想') # 联想电脑便宜出售
com2.price('苹果') # 苹果电脑便宜出售
Computer.price(com1, '联想') # 联想电脑便宜出售<__main__.Computer object at 0x000001F638F2E048>
com1.func('笔记本') # 联想电脑性能很好<class '__main__.Computer'>
Computer.func('笔记本') # 联想电脑性能很好<class '__main__.Computer'>
com1.exterior('笔记本') # 联想电脑外观好看
Computer.exterior('笔记本') # 联想电脑外观好看
- 类的三大特征之继承
1.类的三大特征:
1.1 继承
1.2 封装
1.3 多态
2.继承的本质:获得别的类的属性(数据与功能)之间的关系称为父类、基类或超类与子类、派生类
2.1 对象:数据和功能的结合体
2.2 类:多个对象相同的数据和功能的结合体
2.3 父类:多个类相同的数据和功能的结合体
类和父类最主要的功能其实就是节省代码
class School:
name = '华清大学' def education(self, name):
print(f'{name}授课') class Student(School):
major = '摄影专业' def __init__(self, hobby):
self.hobby = hobby print(Student.name) # 华清大学
stu1 = Student(School)
Student.education(stu1, '李老师') # 李老师授课
stu2 = School()
School.education(stu2, '李老师') # 李老师授课
Student.education(stu2, '李老师') # 李老师授课
3.类不继承的名字查找顺序:对象先查找自身名称空间、自身没有再查找创造对象的类的名称空间、都无报错 (自身>>>类)
class School:
name = '华清大学' # 2 def major(self, name):
print(f'{name}') stu1 = School()
stu1.name = '摄影专业' # 1
print(stu1.name) # 摄影专业
stu1 = School()
print(stu1.name) # 华清大学
4.类单继承的名字查找顺序:对象先查找自身名称空间、自身没有再查找创造对象的类的名称空间,再无查找继承的父类的名称空间、都无报错(自身>>>类>>>父类)
class School:
name = '华清大学' # 3 class Student(School):
# name = '摄影一班' # 2 def major(self, name):
print(f'{name}') stu1 = Student()
stu1.name = '摄影专业' # 1
print(stu1.name) # 摄影专业 stu1 = Student()
print(stu1.name) # 摄影一班 stu1 = Student()
print(stu1.name) # 华清大学
5.类多继承的名字查找:
5.1 每个分支最后继承的类没有共同继承的类:自身>>>类>>>每个分支一层一层父类
class School1:
# name = '华清大学' # 4
pass class School2:
# name = '宜荷大学' # 6
pass class School3: # 8
# name = '南芜大学'
pass class Major1(School1):
# name = '摄影专业' # 3
pass class Major2(School2):
# name = '绘画专业' # 5
pass class Major3(School3):
# name = '多媒体专业' # 7
pass class Student(Major1, Major2, Major3):
# name = '摄影一班' # 2 def grade(self, name):
print(f'{name}') stu1 = Student()
# stu1.name = '大三' # 1
print(stu1.name)
5.2 每个分支最后继承的类有共同继承的类:自身>>>类>>>每个分支一层一层父类>>>共同继承的类
class Country:
name = '中国' # 9
pass
class School1(Country):
# name = '华清大学' # 4
pass class School2(Country):
# name = '宜荷大学' # 6
pass class School3(Country): # 8
# name = '南芜大学'
pass class Major1(School1):
# name = '摄影专业' # 3
pass class Major2(School2):
# name = '绘画专业' # 5
pass class Major3(School3):
# name = '多媒体专业' # 7
pass class Student(Major1, Major2, Major3):
# name = '摄影一班' # 2 def grade(self, name):
print(f'{name}') stu1 = Student()
# stu1.name = '大三' # 1
print(stu1.name)
- 经典类与新式类
1.经典类:python2环境中无法直接继承object祖先辈类,所以需要手动继承,不然很多功能无法使用
2.新式类:python3环境中默认直接继承object祖先辈类,所以无需手动继承,但为防止可能会切换python2环境,所以建议加object类
class School:
name = '华清大学'
print(f'{name}') print(School.__base__) # class 'object'> class School(object):
name = '华清大学'
print(f'{name}') print(School.__base__) # class 'object'>
- 派生方法:在子类中定义父类的功能并增加功能
class School:
name = '华清大学' def __init__(self, rank):
self.rank = rank class Student(School):
def __init__(self, rank, major):
School.__init__(self, rank)
# super.__init__(rank)
self.major = major stu1 = Student('排名第一', '摄影专业')
print(stu1.__dict__) # {'rank': '排名第一', 'major': '摄影专业'}
print(stu1.rank) # 排名第一 class School(list):
def append(self, value):
# if value == '清水高中':
# return
super().append(value) sch1 = School()
sch1.append('南芜大学')
print(sch1) # ['南芜大学']
sch1.append('清水高中') # ['南芜大学']
print(sch1)
sch1.append('宜荷大学')
print(sch1) # ['南芜大学', '宜荷大学'
python对象的独有功能与面向对象的特征的更多相关文章
- Python基础入门(6)- 面向对象编程
1.初识面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本篇随笔将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象 ...
- python学习笔记-(十)面向对象基础
面向对象相关知识简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...
- python 自动化之路 day 07 面向对象基础
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 面向对象编程 OOP编程是利用"类"和"对象" ...
- Python 第六篇(中):面向对象编程中级篇
面向对象编程中级篇: 编程思想概述: 面向过程:根据业务逻辑从上到下写垒代码 #最low,淘汰 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 #混口饭吃 def add(ho ...
- Python 第六篇(上):面向对象编程初级篇
面向:过程.函数.对象: 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊 ...
- python学习 day15打卡 初识面向对象
本节主要内容: 1.面向对象和面向过程 2.面向对象如何编写 3.面向对象和面向过程的对比 4.面向对象的三大特征 一.面向对象和面向过程(重点理解) 1.面向过程:一切以事物的流程为核心.核心是&q ...
- Python学习系列(八)( 面向对象基础)
Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类 ...
- python系列十六:Python3 面向对象
#!/usr/bin/python #-*-coding:gbk-*- #Python3 面向对象 '''面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了 ...
- python对象序列化或持久化的方法
http://blog.csdn.net/chen_lovelotus/article/details/7233293 一.Python对象持久化方法 目前为止,据我所知,在python中对象持久化有 ...
随机推荐
- Jenkins安装详解
一.Jenkins是什么 Jenkins是一个独立的开源自动化服务器,可用于自动执行与构建,测试,交付或者部署软件相关的各种任务,是跨平台持续集成和持续交付应用程序,提高工作效率.使用Jenkins不 ...
- 151-模型-Power BI&Power Pivot模型DAX函数使用量分析
151-模型-Power BI&Power Pivot模型DAX函数使用量分析 1.背景 我们在 Power BI 或者 Power Pivot 项目中会写很多的 DAX 表达式.在最后项目交 ...
- Android Studio中一套代码多版本打包
一套代码达到以下效果: 打包不同applicationId能同时安装在同一手机上 不同logo,app名称, 不同第三方SDK接入配置(例如微信分享appid,激光推送appkey) 能区分debug ...
- vision transformer
VIT 总览 Step1 Step2
- 利用Github Action实现Tornadofx/JavaFx打包
原文地址: 利用Github Action实现Tornadofx/JavaFx打包 - Stars-One的杂货小窝 最近开了个新项目,主要是个工具软件,也算个人的自娱自乐吧,也算开源的一部分,想着都 ...
- ElasticSearch7.3学习(三十一)----Logstash基础学习
一.Logstash基本介绍 Logstash 是一个功能强大的工具,可与各种部署集成. 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据(文件.数据库......).logstas ...
- Blazor WebAssembly + Grpc Web = 未来?
Blazor WebAssembly是什么 首先来说说WebAssembly是什么,WebAssembly是一个可以使C#,Java,Golang等静态强类型编程语言,运行在浏览器中的标准,浏览器厂商 ...
- python基础知识-day7(文件操作)
1.文件IO操作: 1)操作文件使用的函数是open() 2)操作文件的模式: a.r:读取文件 b.w:往文件里边写内容(先删除文件里边已有的内容) c.a:是追加(在文件基础上写入新的内容) d. ...
- SAP Web Dynpro-集成消息
您可以使用消息管理器将消息集成到消息日志中. 您可以使用Web Dynpro代码向导打开消息管理器. 您可以从工具栏中打开Web Dynpro代码向导. 当您的ABAP工作台处于更改模式或编辑视图或控 ...
- CMU15445 之 Project#0 - C++ Primer 详解
前言 这个实验主要用来测试大家对现代 C++ 的掌握程度,实验要求如下: 简单翻译一下上述要求,就是我们需要实现定义在 src/include/primer/p0_starter.h 中的三个类 Ma ...