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的更多相关文章

  1. Python OOP(1):从基础开始

    本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassName(object): """docstring for ClassNam ...

  2. <转>Python OOP(1):从基础开始

    转自  http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...

  3. Python OOP(面向对象编程)

    一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...

  4. javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点

    主要是javascript中消除字符串空格,比较两种方式的不同 //面向对象,消除字符串两边空格 String.prototype.trim = function() { return this.re ...

  5. Python OOP面向对象

    一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...

  6. Python OOP 面向对象

    1.Python实现OOP可以概括为三个概念: 继承:基于Python属性查找 多态:在x.method中,method的意义取决于x的类型 封装:方法和运算符实现行为,数据隐藏是一种惯例 2.委托: ...

  7. python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)

    把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...

  8. Python OOP知识积累

    目录 目录 前言 对象 类 面向对象 Python 面向对象编程三个基本特征 封装 继承 继承的作用 泛化与特化 实现继承的方式 多重继承 多态 方法多态 最后 前言 Python是一个功能非常强大的 ...

  9. python oop __slots__方法

    动态语言python 可以在程序运行的情况下给class加上功能.具体为 #引入一个 from types import MethodType #方法 #然后 s.set_age = MethodTy ...

随机推荐

  1. selenium-java web自动化测试工具

    本篇文章由来,这两天整理了下自己经常使用而且很熟练的项目,今天突然想起漏了一个,补上了,但想到还没对应的博客,那就写一个简单的 我经常使用且相对熟练的部分技术如下(不知道算不算各位大神眼中的辣鸡): ...

  2. PhpStudy 升级 MySQL 版本到5.7

    1:备份当前数据库数据. 最好是导成 SQL 文件 2:备份 PhpStudy 下的 MySQL 文件夹.以防升级失败.还可以使用旧版本的数据库 3:下载MySQL5.7.解压.然后放在 PhpStu ...

  3. rpm命令的使用

    如果服务器配置了本地yum源,大部分的常用软件包都是有的.如果差了头文件或者什么so文件,可以按如下方式找:#以memory.h为例 [root@sz-cdn-centos7-1 tmp]# wher ...

  4. 揭开Java内存管理的面纱

    前言 相对于C.C++这些高性能语言,Java有着让此类程序员羡慕的功能:内存自动管理.似乎这样,Java程序员不用再关心内存,也不用去了解相关知识.但结果真的是这样吗?特别对于我们这种Android ...

  5. bzoj4326 运输计划

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n ...

  6. java indexof、BigDecimal、字符串替换

    自我总结,有什么需要改正弥补的地方,请指出,感激不尽! 本次总结了indexof的用法,BigDecimal的乘法.移位运算,Decimal的格式化输出,字符串替换 上代码: 测试类 Test.jav ...

  7. Java设计模式——策略模式

    策略模式的定义: 策略模式其实特别好理解,俗话说得好,条条大路通罗马,做的都是一件事,实现的方式却可以千万种,在这种情况下,如何使得每个人都可以根据自己的喜好来选择具体的方式,在调用时可以根据不同方式 ...

  8. manacher 模板

    求最长回文子序列的 O(n)做法 讲解 #include <iostream> #include <cstdio> #include <algorithm> #in ...

  9. xBIM WeXplorer xViewer 基本应用

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  10. docker dead but pid file exists

    CentOS 6安装docker 报docker dead but pid file exists 执行 yum install epel-release yum install docker-io ...