python 面向对象编程简称_Python基础-面向对象编程

简介

三中编程范式

面向过程编程

函数式编程

面向对象编程

面向对象和面向过程对比

面向过程

优点:

性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点:

没有面向对象易维护、易复用、易扩展

面向对象

优点:

易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 - 缺点:

性能比面向过程低

定义

类(Class)

用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

函数属性

即函数,在面向对象里统称为方法

数据属性

即变量,类变量或者实例变量用于处理类及其实例对象的相关的数据。

方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

实例变量

定义在方法中的变量,只作用于当前实例的类。

封装

描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数。

继承

即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

实例化

创建一个类的实例,类的具体对象。

方法

类中定义的函数。

对象

通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

示例

声明类示例

class 类名(可选参数):

["注释"]

类体

数据&函数属性调用

class Text:

'''这是一个测试的类!'''

a = '测试'

def test():

print("这是一个测试函数(方法)!")

print(Text.a)

Text.test()

print(dir(Text)) #查看属性名称

print(Text.__dict__) #查看类属性的字典

测试

这是一个测试函数(方法)!

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'test']

{'__module__': '__main__', '__doc__': '这是一个测试的类!', 'a': '测试', 'test': , '__dict__': , '__weakref__': }

初始化函数

class Text:

'''这是一个测试的初始化函数!'''

def __init__(self,name,age,gender):

self.a = name

self.b = age

self.c = gender

v = Text("小明","18岁","男") #实例化生成的对象

print(v.__dict__) #生成对应的字典

print(v.a,v.b,v.c) #字典取值

封装

==即把代码隐藏起来,并非真正隐藏,而是一种使用接口调用“隐藏”类的约定==

隐藏调用,_开头的函数

class Test:

_num = "this is test!!!"

P = Test()

print(P._num)

隐藏调用,__开头的函数

class Test:

__num = "this is test!!!"

P = Test()

print(P._Test__num)

增删改查

==注:类底层以字典形式记录保存数据,切勿以字典形式修改数据==

数据属性增删改查

# -*- coding:utf8 -*-

class Obj:

mold='动物'

def __init__(self,name):

self.name = name

def play_ball(self,ball):

print('%s是一个%s' %(self.name,ball))

print(Obj.mold) #查看

Obj.mold = '植物' #修改

print(Obj.mold) #显示修改后内容

Obj.aquatic = "水产" #增加

print(Obj.aquatic) #显示增加后的内容

del Obj.aquatic #删除

动物

植物

水产

函数属性增删改查

# -*- coding:utf8 -*-

class Obj:

mold='动物'

def __init__(self,name):

self.name = name

def play_ball(self,ball):

print('%s是一个%s' %(self.name,ball))

def test():

print("This is test !!!")

def test2():

print("My test2 !!!")

Obj.add_test =test #新增

print(Obj.__dict__) #确认是否加入类

Obj.add_test() #查看

Obj.play_ball = test2 #修改

Obj.play_ball() #修改后查看确认

del Obj.add_test #删除

{'__module__': '__main__', 'mold': '动物', '__init__': , 'play_ball': , '__dict__': , '__weakref__': , '__doc__': None, 'add_test': }

This is test !!!

My test2 !!!

实例属性增删改查

# -*- coding:utf8 -*-

class Obj:

mold='动物'

def __init__(self,name):

self.name = name

def play_ball(self,ball):

print('%s是一个%s' %(self.name,ball))

def test():

print("This is test !!!")

def test2():

print("My test2 !!!")

P = Obj('小猫') #生成实例

P.play_ball('钓鱼') #执行查看

P.address = '河边' #实例增加数据属性

print(P.__dict__) #查看实例增加的数据属性

print(P.address)

P.test = test #实例增加函数属性

print(P.__dict__) #查看示例增加的函数属性

print(P.test)

P.test() #执行测试

小猫是一个钓鱼

{'name': '小猫', 'address': '河边'}

河边

{'name': '小猫', 'address': '河边', 'test': }

This is test !!!

特殊类属性

名称

释义

Class.__name__

类的名字

Class.__doc__

类的文档(声明注释内容)

Class.__base__

类的第一个父类

Class.__bases__

类的所有弗雷构成的元组

Class.__dict__

类的属性

Class.__module__

类定义所在的模块

Class.__class__

示例对应的类

面向对象设计

数据类型余动作的结合

# -*- coding:utf8 -*-

def production(name,addr,type): #函数定义的类型

def eat(obj): #函数定义的动作1

print('在%s有一个%s的%s' %(obj['addr'],obj['type'],obj['name'])) #输出项目内容,以字典形式传值,接受项也需要是字典

def play(obj): #函数定义的动作2

print('%s正在%s%s' %(obj['name'],obj['addr'],obj['type'])) #输出项目内容,以字典形式传值,接受项也需要是字典

def init(name,addr,type): #初始化函数把动作和类型放置一起

obj_dic = { #定义的包含动作和类型的字典

'name':name,

'addr':addr,

'type':type,

'eat':eat,

'play':play

}

return obj_dic #返回动作和类型的字典

return init(name,addr,type) #返回动作和类型的对象

s1 = production('小猫','河边','钓鱼') #生产测试

print(s1) #生产类型,输出包含动作和类型的的项目字典

s1['play'](s1) #总体执行,包含动作和类型,嵌套函数以字典传值所以函数参数为原函数执行的字典结果

{'name': '小猫', 'addr': '河边', 'type': '钓鱼', 'eat': .eat at 0x0000024E1B3C41E0>, 'play': .play at 0x0000024E1B3C42F0>}

小猫正在河边钓鱼

面向对象编程

面向对象编程独有语法去实现面向对象设计

# -*- coding:utf8 -*-

class Test: #定义类的类型

def eat(obj): #函数定义的动作1

print('在%s有一个%s的%s' %(s1.b,s1.c,s1.a)) #输出项目内容,从初始化函数中调用

def play(obj): #函数定义的动作2

print('%s正在%s%s' %(s1.a,s1.b,s1.c)) #输出项目内容,从初始化函数中调用

def __init__(self,name,addr,type): #初始化函数

self.a = name

self.b = addr

self.c = type

s1 = Test('小猫','河边','钓鱼') #生产测试

print(s1) #生产类型,输出实例化对象

s1.play() #总体执行,包含动作和类型

小猫正在河边钓鱼

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

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

相关文章

Linux设备驱动模型3——平台总线的工作原理

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、平台总线的简介 1、平台总线的简介 (1)平台总线属于总线中的一种,相对于usb、pci、i2c等物理总线来说,平台总线是虚拟的、抽象出来的。 &#xff…

MYSQL中的BlackHole引擎

MYSQL中的BlackHole引擎 http://blog.csdn.net/ylspirit/article/details/7234021 http://blog.chinaunix.net/uid-22646981-id-3271711.html MySQL在5.x系列提供了Blackhole引擎–“黑洞”. 其作用正如其名字一样:任何写入到此引擎的数据均会被丢弃掉,…

mysql备份到带库_RMAN备份恢复——备份到带库的性能

简单测试了一下rac环境通过RMAN备份到带库的功能。数据库:Oracle 10203 RAC for Solaris8带库:Quantum PX502备份软件:Veritas netbackup 6.0由于带库是502,因此包含两个控制器。也就是说,应该可以通过两个控制性并行写…

《DIY四轴飞行器》读书笔记1

内容整理于黄和悦的《DIY四轴飞行器》。 一、四轴飞行器概述 1、四轴飞行器的现状 (1)研究内容 多级协作,自主飞行倾斜;最优控制理论,飞行器自主飞行和避障;主要是飞控部分。 (2&#xff09…

脚本输出当前 “yyyy-MM-dd WeakDay Festval”

ylbtech-JavaScript: 脚本输出当前 “yyyy-MM-dd WeakDay Festval”脚本输出当前 “yyyy-MM-dd WeakDay Festval” 1.A,源代码(Source Code)-脚本输出当前 “yyyy-MM-dd WeakDay Festval”返回顶部 <SCRIPT languagejavascript> <!--calendar new Date();day cal…

SecureCRT密钥远程登录Linux

一&#xff1a;环境SecureCRT版本&#xff1a;SecureCRT_5.1.3linux版本&#xff1a;[rootangelT ~]# cat /etc/redhat-release CentOS release 6.4 (Final)[rootangelT ~]# uname -r2.6.32-358.el6.x86_64linux系统的sshd_config配置文件是默认的&#xff0c;没有任何的修改。…

源码安装mysql数据库_Linux下源码安装mysql数据库

1、 创建mysql安装目录&#xff1a;[rootlocalhost ~]#mkdir –pv /usr/local/mysql/2、 创建数据存放目录&#xff1a;[rootlocalhost ~]#mkdir –pv /data/mysql/3、 创建用户和用户组&#xff0c;并赋予数据存放目录权限&#xff1a;[rootlocalhost ~]#groupadd mysql[ro…

win10禁止数字签名

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 1、点击通知&#xff0c;找到并进入“所有设置”。 2、在所有设置中找到并进入“更新和安全”。 3、找到恢复&#xff0c;点击“高级启动”下的“立即重启”&#xff0c;重启电脑。 4、重启后选择“疑难解…

信息采集-火车采集器

最近一位同事提出要采集alibaba上的公司信息&#xff0c;关键词是工业加湿器。 主管把任务分配给我后&#xff0c;推荐了一款软件&#xff0c;火车采集器&#xff08;真心不是做广告&#xff09;。 研究了两天&#xff0c;还算简单&#xff0c;除了正则表达式似懂非懂&#xff…

在Linux系统安装Nginx及配置https加密访问

2019独角兽企业重金招聘Python工程师标准>>> 1、安装nginx ①、为了确保能在 nginx 中使用正则表达式进行更灵活的配置&#xff0c;安装之前需要确定系统是否安装有 PCRE&#xff08;Perl Compatible Regular Expressions&#xff09;包。您可以到 ftp://ftp.csx.c…

mysql cstmt_MySQL

创建一个以JDBC连接数据库的程序&#xff0c;包含7个步骤&#xff1a;1、加载JDBC驱动程序&#xff1a;在连接数据库之前&#xff0c;首先要加载想要连接的数据库的驱动到JVM(Java虚拟机)&#xff0c;这通过java.lang.Class类的静态方法forName(String className)实现。例如&am…

mkv210_image.c文件详解(为BL1添加校验头)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、mkv210_image.c的使用演示 裸机程序中的Makefile是把程序的编译和链接过程分开的。实际上真正的项目的Makefile也是这样的&#xff0c;只是平时我们用gcc a.c -o exe这种方式编译时&#xff0c;把…

和菜鸟一起学linux之bluez学习记录2

这里主要摘取对于hci&#xff0c;l2cap&#xff0c;sdp和rfcomm的一些应用编程。 关于hci 一、HCI层协议概述 1、HCI Command Packets 详见bluez源码&#xff1a;lib/hci.h /* Link Control */ #define OGF_LINK_CTL 0x01 #define OCF_INQUIRY 0x0001 #define OCF_…

AppDelegate.h

2019独角兽企业重金招聘Python工程师标准>>> #ifndef __APP_DELEGATE_H__ #define __APP_DELEGATE_H__#include "CCApplication.h" //CCApplication.h能根据平台打开对应的平台头文件 /** brief The cocos2d Application.The reason for implement as …

wamp替换mysql_将wamp集成的mysql替换成安装版的

替换原因&#xff1a;wamp集成的mysql错误提示乱码。修改文件&#xff1a;路径C:\wamp下的wampmanager.conf&#xff0c;wampmanager.ini&#xff0c;uninstall_services.bat路径C:\wamp\bin\mysql\mysql5.6.17下的wampserver.conf步骤&#xff1a;1.安装wamp和mysql&#xff0…

关于uboot的简介——uboot的一些常识介绍

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、uboot的由来 1、uboot从哪里来的&#xff1f; uboot是SourceForge上的开源项目。uboot项目的作者&#xff1a;一个德国人最早发起的项目。uboot就是由一个人发起&#xff0c;然后由整个网络上所…

有目标

生活就是每一天都有一个目标&#xff0c;不管大或者小&#xff0c;只要很好的完成了&#xff0c;都会觉得很有成就感&#xff01;转载于:https://www.cnblogs.com/jackychua/archive/2013/04/01/2994434.html

虚拟机上网以及互ping问题

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 虚拟机设置静态IP和上网问题 &#xff08;1&#xff09;在“虚拟机——设置——网络适配器”中选择桥接模式&#xff1b; &#xff08;2&#xff09;在“编辑——虚拟网络编辑器”中&#xff0c;选择桥接到有…

php定时执行原理

即使关掉浏览器也能继续执行 ignore_user_abort(); //即使Client断开(如关掉浏览器)&#xff0c;PHP脚本也可以继续执行. set_time_limit(0); // 执行时间为无限制&#xff0c;php默认的执行时间是30秒&#xff0c;通过set_time_limit(0)可以让程序无限制的执行下去 转载于:htt…

php递归无限极分类

递归无限级分类有几种形式&#xff0c;我这里仅仅举例比較经常使用的三种&#xff1a; 第一种&#xff1a;返回有排序的数组&#xff1a; <?php$data array(1 > array(id > 1,pid > 0,user_name > one,),2 > array(id > 2,pid > 1,user_name > tw…