python类和oop基础知识

文章目录

        • oop:面向对象程序设计
        • python类的特点:
        • oop基本概念:
          • 1.属性继承搜索:
          • 2.类和实例:
          • 3.类方法调用
          • 4.编写类树
          • 5.代码重用

oop:面向对象程序设计

1.类:一些函数的包,这些函数大量使用并处理内置对象类型。

2.类的设计是为了创建和管理新的对象。类是定义新种类东西的方式。

3.通过类来实现一个对象,也就意味着建立对象实际结构和关系的模型。

4.继承:学生属于人,学生拥有一般人的属性,在oop术语里面,学生继承了人的通用属性,这些通用属性只需实现一次,就能在我们创建所有种类人的时候使用。

5.组合:组合就是组件的集合。学生是一个组合的实例,学生类里面还包含其他对象,比如学习。每个组件都可以写成类,定义自己的行为和关系,学习可以写成一个学习类。

6.对于GUI系统:写成图形组件的集合(按钮,标签)可以称为接口,绘制图形组件的容器时,图形组件也跟着绘制,这是一种组合。我们编写定制的图形组件(有独特颜色形状的按钮或标签),可以通过接口的继承机制实现。

python类的特点:

1多重实例:类是产生对象的工厂,每调用一个类,就产生一个独有命名空间的新对象。这个对象能够读取类的属性,并可以用自己的命名空间来存储数据,而且不同对象数据也不同。

2通过继承进行定制:在类的外部重新定义其属性从而扩充这个类。

3运算符重载:类可以定义对象来响应在内置类型上的几种运算。

oop基本概念:

1.属性继承搜索:

object.attribute(对象.属性)

这个表达式,会在python中启动搜索,去搜索一个种种对象连接的树,寻找attribute首次出现的对象,找到之后停止搜索。先搜索object,然后是该对象之上的所有类,从下到上,从左到右。

下面这个例子:c1c2c3为类对象,l1,l2为实例对象。

c2:x,z
c1:x,y
c3:w,z
l1:name
l2:name

1.就搜索树来看,实例从他的类继承属性,类是从搜索树中所有比他更上层的类中继承属性。

2.超类提供了所有子类共享的行为,但因为搜索由下而上,子类可能在树中较低位置重新定义超类变量名,覆盖超类的定义。

3.比如l2.w的搜索顺序:l2,c1,c2,c3,也就是说,l2从c3继承了属性w

l1.x搜索顺序:l1,c1

l1.name搜索顺序:l1

如果说找不到某一属性,比如:l1.k,此时发生错误。

2.类和实例:

类通常都有函数,而实例有一些数据项,类的函数使用了这些数据。实例像是带有数据的记录,类是处理这些记录的数据。

3.类方法调用

调用类函数的时候,总会有一个主体对象,这个主体就是类的实例。python把隐含的实例传进方法中。方法能够通过实例或类进行调用。jack.givemoney()同于employee.givemoney(jack)。

l2.w()的意思是调用c3.w处理l2,l2.w()同于c3.w(l2)

4.编写类树

每个class对象会生成一个新对象。

每次类调用时,会生成新的实例对象。

实例自动连接至创建这些实例的类。

类连接至其超类的方式,将超类列在类头部的括号内,其从左至右的顺序会决定树中的次序。(在类树中,class语句小括号内有一个以上超类,他们从左至右的次序决定超类搜索的顺序)

上面的图可以表示成:

#创建三个类对象
class C2#省略具体内容
class c3: #省略
class C1(c2,c3):#省略
#创建两个实例对象
l1=c1()
l2=c2()

附加在实例上的属性只属于那些实例,而附加在类上的属性,由所有子类及其实例共享。如c1和l1

python把隐含的实例传进方法中第一个特殊的参数,习惯称之为self。

class c1(c2,c3):def setname(self,who):self.name=who
l1=c1()
l1.setname('jack')
print(l1.name)

类通过函数为实例提供行为,上面例子,l1传入self里,指明了类处理的实例是l1,然后通过类里面的函数def对self做赋值运算,把属性添加到类对象之中。self用来存储实例内部变量名。

对于类来说:属性通常是在class语句中通过赋值语句添加在类中,而不是通过def函数。

对于实例来说:属性通常是在类内,对传给def函数的特殊参数(self),做赋值运算,而添加在实例中。

通过构造函数,创建实例时初始化实例。

上述代码,在setname方法调用前,c1不会把name属性附加在实例上,那么在调用l1.setname前引用l1.name会产生未定义变量名的错误。如果类要确保name变量名一定会在实例中被设置,通常在构造时就填好这个属性。

class c1(c2,c3):def _init_(self,who):self.name=who
l1=c1('jack')
print(l1.name)

每次从类产生实例时,python会自动调用名为_init_的方法,它也称之为构造函数。新实例传入self参数,类调用小括号内的任何值成为第二个及以后的参数。

5.代码重用

通过类,我们可以定制现有的软件来编写代码,而不是对现有代码进行原处修改,或者每个项目都从头开始。自动属性继承搜索,软件定制,这些是通过模块和函数做不到的。

方法只有特殊第一参数self的函数,我门可以把要处理的对象传给简单函数,模拟其行为。方法参与了类的继承,我们可以通过定义新方法编写子类,而不用原处修改代码。

class employee:def computesalary(self):#省略内容def giveraise(self):#省略def promote(self):#省略def retire(self):#省略

employee是一个通用的超类,定义所有员工默认的通用行为。

class engineer(employee):def computesalary(self):#省略

这里engineer继承了employee,是他的一个子类,这里我们重载了computesalary方法,实现了定制的目的。这个engineer类型的员工的其他行为会继承employee里面的行为。

之所以说定制,是因为这里的computesalary在employee的下面。所以类树搜索时搜到他就截止。

jack=employee()
kk=engineer()

我们可以对树中任何类创建实例,创建的实例所用的类,会决定其属性搜索从哪个层次开始。

company=[jack,kk]
for emp in company:print(emp.computesalary())

两个实例对象,可以嵌入到一个更大的容器对象里,从而可以代表一个部门

这个for里面也用到了多态,隐藏了接口的差异性。

多态还可以用到下面:

处理数据流的程序,可以写成预期有输入和输出方法的对象,而不用关心那些方法实际做的是什么

def processor(reader,converter,writer):while 1:data = reader.read()if not data:breakdata=converter(data)writer.write(data)
class reader:def read(self):#省略def other(self):#省略
class filereader(reader):def read(self):#省略
class socketreader(reader):def read(self):#省略
#...省略...processor(filereader(...),converter,filewriter(...))
processor(ftpreader(...),converter,xmlwriter(...))

所谓框架,就是把常见程序设计成类,让你可以编写一些子类,写一两个方法,树中较高位置的框架类会替你做大多数工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机语言中tc是什么,新人必须了解的几个TC常用语和脚本基础知识!

基础知识TC常用语一,函数在百度百科中是这样解释函数的:函数(function)表示每个输入值对应唯一输出值的一种对应关系。在计算机定义中函数过程中的这些语句用于完成某些有意义的工作——通常是处理文本,控制输入或计算数值。通过在程序代码中引入函数名称和所需的参…

mysql中pi是什么意思_MySQL 基础知识与常用命令

MySQLMySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Inte…

科幻计算机类小说,短篇科幻小说推荐 | 黄金时代的五部科幻杰作

编注:本文是少数派读书月「我读过的好书」征文活动的入围文章。本文仅代表作者本人观点,少数派对标题和排版略作调整。想了解如何参与本次读书征文,赢取各种丰厚奖品,你可以 点此查看 活动规则和奖品清单。文章包含五个故事的情节…

数据结构:单链表

文章目录链表:单链表的实现及操作:1.指针描述的单链表L存储结构2.查找L的第i个元素,将其值赋值给e3.在L的第i个位置之前插入元素e4.在L中,删除第i个元素,并返回其值e5.输入n个元素,建立带头节点的单链表L6.…

mysql离散查询_如何写出高性能的MySQL查询

作者:会写代码的猪 发布时间:December 25, 2009 分类:猪在写代码想写这样一篇文章很久了,但始终没有下手。最近帮同事看了几个查询,而且自己也在考虑一个索引系统的问题,所以今天就把这个写了。介绍一下MyS…

计算机中丢失msc,mscvr120.dll32位/64位版_修复计算机中丢失msvcr120.dll

mscvr120.dll32位/64位版_修复计算机中丢失msvcr120.dllmscvr120.dll是系统的非常重要的一个文件,相信很多的人都是遇到文件丢失的情况,这个时候就需要你在下载一个dll文件使用了!现在就为大家提供最新的dll文件下载,需要的可以看…

mysql解压缩版配置_MySQL 5.6 for Windows 解压缩版配置安装

1、MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的。如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C:\Program Files\MySQL\MySQL Server 5.6 该…

数据结构:顺序栈

文章目录栈:顺序栈的实现及操作:1.定义一个栈2.构造一个空栈3.取栈顶元素4.插入元素e5.删除栈顶元素,返回其值6.清空栈,销毁栈栈的操作实例及代码:栈: 从数据结构上来看,栈也是线性表&#xff…

计算机二级考试开考多久能出来,【计算机二级】明天就要开考了,你们准备好了吗?...

原标题:【计算机二级】明天就要开考了,你们准备好了吗?计算机二级考试马上要来了现在距离考试只有不到几个小时的时间了不知道各位同学准备的怎么样了呢?人有多大胆,复习拖多晚但这可不是什么好习惯奔赴“战场”之前先…

mysql面试题 高级_高级MySQL数据库面试问题 附答案

mysql -u USER_NAME -xml -e SELECT * FROM table_name > table_name.xml上面的例子中USER_NAME是数据库的用户名,table_name是待导出为xml文件的表名,table_name.xml是存放数据的xml文件9. MySQL_pconnect是什么? 它和MySQL_connect有什么区别?答&…

办公室中有一台计算机连接打印机,办公室就一个打印机,怎么让多个电脑一起用...

中小型企业的办公室一般只配一台打印机,每次打印东西都要把文件拷在U盘再转到连接打印机的那台电脑,很麻烦。那么怎么才能实现打印机多台电脑共享呢?以下把连接打印机的电脑成为“主电脑”,把需要的共享的电脑叫“客电脑”。1.设置…

数据结构:单链队列

文章目录队列:单链队列的实现及操作:1.定义一个队列2.构造一个空队列3.销毁队列4.插入元素e到队尾5.删除队头元素,用e返回其值单链队列操作实例及代码:队列: 队列是先进先出的线性表。 队列只允许在表的一端插入元素…

php修改mysql数据找不到_php 如何修改mysql数据

PHP MYSQL 修改删除数据创建userinfo_update.php,用于查询用户信息,先显示信息,在修改:先通过GET获取用户编号查询用户信息:$sql "select * from user_info where user_id".$_GET[userId]."";$re…

人工智能训练机器人的服务器,人工智能系统教会机器人如何在荒野中行走

对救援人员和户外运动爱好者来说,穿越荒野小径是一项有用的技能,但对机器人来说却很难。这并不是说这些机械动物没有能力在爬上山坡的同时避开倒下的树枝——最先进的机器学习算法可以做到这一点。问题在于它们缺乏通用性:人工智能驱动的机器…

(递归)猴子吃桃

题目&#xff1a; 猴子买一堆桃不知个数&#xff0c;每天吃桃子一半多一个&#xff0c;第n天只剩一个桃&#xff0c;问一开始买了几个桃。输入整数n(2<n<30)。输出买的桃的数量。 样例输入2&#xff0c;输出4。 样例输入3&#xff0c;输出10。 分析与解答&#xff1a; …

世界手机号码格式_脑炎康复之旅——世界脑炎日病友征文

○○脑炎康复之旅世界脑炎日病友征文2月22日是世界脑炎日(World Encephalitis Day)。2014年发起的世界脑炎日旨在致敬和鼓励全世界经历过脑炎的患者和脑炎医疗工作者。几年来&#xff0c;全球已有1.87亿人次参与世界脑炎日活动。2021年的世界脑炎日即将到来&#xff0c;今年世界…

pythoni手机版下载_Python进度栏和下载

已更新您的示例网址&#xff1a;我刚刚为此编写了一种超级简单的方法(将其略微修改)&#xff0c;以将pdfs刮出某个站点。 请注意&#xff0c;由于Powershell无法处理“ \ r”&#xff0c;因此只能在基于UNIX的系统(Linux&#xff0c;Mac OS)上正常运行import requestslink &qu…

(递归)斐波那契数列

题目 f1f21,fnafn−1bfn−2(n>2)f1f21,f_naf_{n-1}bf_{n-2}(n>2)f1f21,fn​afn−1​bfn−2​(n>2) 输入包含四个整数n(1≤n≤100),a(1≤a≤10),b(1≤a≤10),p((1≤a≤2000)。n(1\leq n \leq 100),a(1\leq a \leq 10),b(1\leq a \leq 10),p((1\leq a \leq 2000)。n(1≤…

树莓派和微信和服务器,用树莓派搭建微信公共平台

1、首先你需要一个公网ip&#xff0c; 需要做好映射&#xff0c; 把80端口映射到你的树莓派ip。2、打开你的树莓派终端&#xff0c; 创建文件夹“templates ” 和文件“weixind.py”。3、文件“weixind.py”中写入以下代码。安装“sudo apt-get install python-lxml”。5、申请…

mysql数据异常增长_mysql表到一定数据量后会异常的增长

如题InnoDB的table&#xff0c;里面的字段非常简单&#xff0c;如图中的类型才100多W的数据量&#xff0c;数据是慢慢积累起来的&#xff0c;到了最近发现涨到12G后&#xff0c;会每天成倍的增长&#xff0c;最高到达过50G&#xff0c;而数据量还是那些&#xff0c;longtext的字…