python>oop
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 ...
随机推荐
- Composer - windows下安装方法
在windows下安装的方法 方法一:使用安装程序 这是将 Composer 安装在你机器上的最简单的方法. 下载并且运行 Composer-Setup.exe,它将安装最新版本的 Composer ...
- 对datatable操作经验-排序和分页
1.datatable排序1: public DataTable SortDesc(DataTable dt){ DataView dv = new DataView(); dv.Table = dt ...
- 机器学习--kNN算法识别手写字母
本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...
- Using Custom Domains With IIS Express In Asp.Net Core
IIS Express是一个Mini版的IIS,能够支持所有的Web开发任务,但是这种设计有一些缺陷,例如只能通过localhost:<port>的方式来访问我们的应用程序,看起来就有点不 ...
- BZOJ 2141: 排队 [CDQ分治]
题意: 交换序列中两个元素,求逆序对 做分块做到这道题...一看不是三维偏序嘛.... 作为不会树套树的蒟蒻就写CDQ分治吧.... 对时间分治...x排序...y树状数组... 交换拆成两个插入两个 ...
- 在控制台进行依赖注入(DI in Console)
首先我们准备两个服务接口 public interface IServiceA { void showConsole(); int GetValue(int val); } public interf ...
- Java实现单链表的快速排序和归并排序
本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space ...
- mongodb window安装配置
下载mongodb安装包 1. https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl?_ga=2.233271640.711265466.15193 ...
- Jmeter_上传与下载
今天重点说一下Jmeter的上传与下载 1:Jmeter上传文件 首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看.注意,此处我的文件路 ...
- ZooKeeper简介与集群部署
ZooKeeper 是一个开源的分布式协调服务,由雅虎公司创建,是Google Chubby的开源实现,ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的 ...