oop即Object Oriented programming,面向对象编程
何为编程:特定的语法+数据结构+算法
编程范式就是从经验中总结的套路:
面向过程编程
适用于简单的脚本,一次任务是极好的,但是复杂的,需要后期维护的就**了
面向函数编程
将电脑运算视为数学上的函数计算
优点:可读性强,因为数据不可变,所以多线程安全,完成同功能代码量比oop少,更清晰,速度也要高很多
缺点:由于数据不可变,所以非常占用运算资源,先天设计导致性能一直不够,要想大规模的使用函数式编程,还有很多问题
面向对象编程
世界万物,皆可分类
世界万物,皆为对象
只要是对象,就属于类
只要是对象,就有属性
缺点:修改数据导致数据的不确定性,为了写可重用的代码而产生的无用代码.并没有完全理解面向对象思想,为了面向对象而面向对象,使得代码晦涩难懂,后期维护产生问题..使用场景不能是性能苛刻的地方
oop简介
类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
类变量:类变量在整个实例化的对象中是公有的.类变量定义在类中,函数体之外,通常不作为实例变量使用
数据成员:类变量或者实例变量用于处理类以及实例对象的相关的数据
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫做覆盖,也叫方法重写
实例变量:定义在方法中的变量,只作用于当前实例的类。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:类(模型)经过实例化后更好的被程序所调用,一个类可以实例化多个对象,一个对象可以有多个属性,对象包括两个数据成员(类变量和实例变量)和方法
三大特性
封装:在类中对数据的赋值,内部调用对外部是不可见的,这使类变成了一个容器
class people:
the_number_of_people = 0
def __init__(self,name,age):
self.Name = name
se;f.Age = age
def __del__(self):
print('It's over')
def eat(self):
print('%s is eating'%elf.Name)
def talk(self):
print('%s is talking'%self.Age)
def __init__(self): 方法是一种特殊的方法,被称为构造函数或者初始化方法
self 代表类的实例,代表当前对象的地址,,,self.Name则指向类..self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
the_number_of_people变量是一个类变量,他的值将会在这个类的所有实例之间共享,你可以在内部类或者外部类使用people.the_number_of_people访问
创建实例对象
peo1 = people('slz',19)创建people类的地一个对象
peo2 = people('sunlizhao',19.9)创建people的第二个对象
访问属性,调用方法
可以通过( . )来访问对象的属性
peo1.the_number_of_people #属性
peo2.talk() #方法
类的方法
在类的内部,使用def关键字来定义一个方法,跟一般函数定义不同,类方法必须包含参数self,且为第一个参数,self代表类的实例
class people:
def __init__(self,name,age):
self.Name = name
self.Age = age
def __del__(self):
print("It's over")
def eat(self):
print('%s说:我%s岁了'%(self.Name,self.Age)) peo1 = people('slz',19)
peo1.eat()
继承:一个类派生出子类,子类自动继承父类的属性和方法,如果一种语言不支持继承,那么类就没什么意义
多继承
class people:
def __init__(self,name,age):
self.Name = name
self.Age = age
def __del__(self):
print("It's over")
def eat(self):
print('%s说:我%s岁了'%(self.Name,self.Age))
class speaker:
__weight = 0
def __init__(self,name,topic):
self.Name = name
self.Topic = topic
def speak(self):
print('自我介绍一下,我是%s,今天我的演讲主题是%s'%(self.Name,self.Topic))
class sample(people,speaker):
def __init__(self,name,age,topic):
people.__init__(self,name,age)
speaker.__init__(self,name,topic) text = sample('slz',19,'python')
text.eat()
text.speak()
__weight是私有属性,私有属性在类外部无法直接进行访问
方法重写
class Parent: # 定义父类
def myMethod(self):
print ('调用父类方法')
class Child(Parent): # 定义子类
def myMethod(self):
print ('调用子类方法')
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法
super()函数用来调用父类的一个方法
私有属性
class JustCounter:
__secreCount = 0
publicCount = 0
def pount(self):
self.__secreCount += 1
self.publicCount += 1
print(self.__secreCount)
counter = JustCounter()
counter.pount()
counter.pount()
print(counter.publicCount)
print(counter.__secreCount) #报错,实例不能访问私有变量
私有方法
#私有方法
class people_:
def __init__(self,name,age):
self.Name = name
self.Age = age
def __del__(self):
print('我还爱你们')
def __haha(self):
print('看不到我,气不气!!!')
peo_1 = people_('slz',58)
peo_1.__haha #报错,私有方法外部不能调用 类的专有方法
__doc__:类的描述信息
class dog:
'''It's gou 的描述'''
print(dog.__doc__)
多态:接口的多种实现即为多态
多态的目的是:实现接口重用
python中没有直接的语法定义多态
class Animal:
def __init__(self,name):
self.name = name
def talk(self):
print('lalala')
def animal_talk(obj):
obj.talk() class Car(Animal):
def talk(self):
print('%s miao,miao,miao'%self.name)
class Dog(Animal):
def talk(self):
print('%s wang,wang,wang'%self.name) a = Car('猴子')
b = Dog('李*华')
Animal.animal_talk(a)
Animal.animal_talk(b)
python>oop的更多相关文章
-
Python OOP(1):从基础开始
本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassName(object): """docstring for ClassNam ...
-
<;转>;Python OOP(1):从基础开始
转自 http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...
-
Python OOP(面向对象编程)
一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...
-
javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点
主要是javascript中消除字符串空格,比较两种方式的不同 //面向对象,消除字符串两边空格 String.prototype.trim = function() { return this.re ...
-
Python OOP面向对象
一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...
-
Python OOP 面向对象
1.Python实现OOP可以概括为三个概念: 继承:基于Python属性查找 多态:在x.method中,method的意义取决于x的类型 封装:方法和运算符实现行为,数据隐藏是一种惯例 2.委托: ...
-
python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)
把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...
-
Python OOP知识积累
目录 目录 前言 对象 类 面向对象 Python 面向对象编程三个基本特征 封装 继承 继承的作用 泛化与特化 实现继承的方式 多重继承 多态 方法多态 最后 前言 Python是一个功能非常强大的 ...
-
python oop __slots__方法
动态语言python 可以在程序运行的情况下给class加上功能.具体为 #引入一个 from types import MethodType #方法 #然后 s.set_age = MethodTy ...
随机推荐
-
SPOJ 227 Ordering the Soldiers 线段树 / 树状数组
题意:设原数组为a[i],pos[i]代表第 i 个位置之前有多少个数比a[i]大,求原数组a[i]. 这个题意是看了别人的题解才明白,我自己没读出来…… 方法:假设我们从左往右放,因为后面的数还有可 ...
-
[STAThread]的含义
Posted on 2007-07-07 10:06 桦林 阅读(33100) 评论(10) 编辑 收藏 [STAThread]STAThread:Single Thread Apar ...
-
CentOS(十)--与Linux文件和目录管理相关的一些重要命令②
在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Lin ...
-
C#中this在构造函数时的使用
今天编程的时候,想要用this来处理构造函数,想了半天没有想起来 后来找了自己以前记录的 http://www.cnblogs.com/chucklu/p/4842766.html public Cu ...
-
android常见错误-The container &#39;Android Dependencies&#39; references non existing library
The container 'Android Dependencies' references non existing library
-
使用VERT.X构建分布式企业级应用
谈到企业应用,就得谈分布式.低耦合.模块化.面向服务.可扩展性等等.早些时候的技术有CORBA和EJB,后面兴起的有WebService和MDB.但是这些技术不是学习.开发门槛高就是不那么轻量化.我现 ...
-
Java Script 学习笔记 (二) Casper JS
1. click() VS mouse.click() 在写自动化脚本要勾选一个复选框时,用casper.mouse.click() 无法选上这个checkbox, 需要用到casper.click( ...
-
Node_初步了解(4)小爬虫
var http=require('http'); var cheerio=require('cheerio'); var url='http://www.cnblogs.com/Lwd-linux/ ...
-
bubbo调用Failed to invoke remote method异常解决
bubbo调用服务异常: com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method: getPlanFlowInfo, pr ...
-
CentOS7 nginx+tomcat实现代理访问java web项目让项目支持jsp和php
如果安装了Tomcat查看版本方法如下:注意:先进到tomcat的bin目录下(cd /tomcat目录/bin),在执行./version.sh [root@izbp bin]# ./version ...