面向对象基础

面向对象编程(抽象)

回顾一下

面向过程编程(思想 )

流水线

优点:逻辑清晰(逻辑一步步的,系统)

缺点:扩展性差(上一个函数的输出是下一个函数的输入)

面向对象编程(思想)

对象: 特征和技能的结合体

面对对象编程:一个个对象进行交互

优点:扩张性非常强

缺点:逻辑非常复杂

类与对象

类(类别):一系列具有相同特征和技能的对象

现实世界中先有对象,后有类

# 定义学生

	# 姓名: 猪瑞星
# 学号: 222222
# 学校: oldboy
# 技能:选课,三十六变 # 姓名: 孔悟空
# 学号: 111111
# 学校: oldboy
# 技能:选课,七十二变 # 姓名: 雷公
# 学号: 666666
# 学校: oldboy
# 技能: 教课,piao # 定义老师 # 姓名: tank
# 学校: oldboy
# 技能: 教课,piao # 姓名: nick
# 学校: oldboy
# 技能:教课,看书

python中先有类,再有对象

class 类名(驼峰体): # 定义类,会直接运行类体内的代码
# 定义一系列特征
# 定义一系列方法 对象1 = 类名() # 实例化出对象

给对象定制独有的特征

class OldBoyStudent:
school = 'oldboy'
def __init__(self,name,age):
self.name = name
self.age = age
def choose_course(self):
print(' is choosing course') stu1 = OldBoyStudent('gll',18)
stu1.school stu2 = OldBoyStudent('nick',18)
stu2.school

对象的属性查找顺序

# 局部存在
class OldBoyStudent:
school = 'oldboy'
name ='nick'
def __init__(self,name,age):
self.name = name
self.age = age def choose_course(self):
print('is choosing course') stu1 = OldBoyStudent('gll',18)
print(stu1.name) # gll stu2 = OldBoyStudent('nick',18)
print(stu2.name) # nick # 局部找不到
class OldBoyStudent:
school = 'oldboy'
name ='nick'
def __init__(self,name,age):
#self.name = name
self.age = age def choose_course(self):
print('is choosing course') stu1 = OldBoyStudent('gll',18)
print(stu1.name) # nick stu2 = OldBoyStudent('nick',18)
print(stu2.name) # nick

类与对象的绑定方法

class OldBoyStudent:
school = 'oldboy' def __init__(self,name,age):
self.name = name
self.age = age def choose_course(self):
print(id(self)) #1983522658680
print(self.school)
print(f'{self.name} is choosing course')
print(name) stu1 = OldBoyStudent('gll',18)
stu1.choose_course() # self 是对象本身
print(id(stu1)) #1983522658680 OldBoyStudent.choose_course(stu1) # 注:
# 针对类而言:choose_course里的self就是传的参数
# 针对对象而言:choose_course里的self就是对象本身

类与数据类型

lis = [1,2,3]
lis2 =list([1,2,3])
# 下面两式等同,理解参数self的概念
lis.append(4) # self自动传lis
# lis2.append(lis,4) # 手动传lis

对象的高度整合

在类里面封装了一大堆特征/数据,然后又封装了一大堆方法(方法用来专门用来操控这些数据的),并且在这基础上对于不同对象,这些属性和方法有不一样

class Animal:
def __init__(self,attri,height,weight):
self.attri = attri
self.height = height
self.weight = weight def jiao(self):
print('self.attr,'开始叫了') def eat(self):
print('self.attri,'开始吃饭了') people = Animal('人类',180,140)
dog = Animal('狗',100,50) people.eat()
dog.jiao()

python 面对对象基础的更多相关文章

  1. Python - 面对对象(基础)

    目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...

  2. Python - 面对对象(进阶)

    目录 Python - 面对对象(进阶) 类的成员 一. 字段 二. 方法 三. 属性 类的修饰符 类的特殊成员 Python - 面对对象(进阶) 类的成员 一. 字段 字段包括:普通字段和静态字段 ...

  3. 16、python面对对象之类和继承

    前言:本文主要介绍python面对对象中的类和继承,包括类方法.静态方法.只读属性.继承等. 一.类方法 1.类方法定义 使用装饰器@classmethod装饰,且第一个参数必须是当前类对象,该参数名 ...

  4. Python - 面对对象(其他相关,异常处理,反射,单例模式,等..)

    目录 Python - 面对对象(其他相关,异常处理,反射,等..) 一.isinstance(obj, cls) 二.issubclass(sub, super) 三.异常处理 1. 异常处理 2. ...

  5. 小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系)

    小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系 1. 依赖关系. 最轻的一种关系 在方法中引入另一个类的对象 class Elephant: def __init__(sel ...

  6. 小学生绞尽脑汁也学不会的python(面对对象-----成员)

    小学生绞尽脑汁也学不会的python(面对对象-----成员) 成员 class Person: def __init__(self, name, num, gender, birthday): # ...

  7. 15、python面对对象之类和对象

    前言:本文主要介绍python面对对象中的类和对象,包括类和对象的概念.类的定义.类属性.实例属性及实例方法等. 一.类和对象的概念 问题:什么是类?什么是实例对象? 类:是一类事物的抽象概念,不是真 ...

  8. python面对对象编程----2:__init__

    面对对象编程估计我们最早接触到的就是__init__了,也就是实例的初始化处理过程: 1:来看看最基础的__init__ class Card(object): #抽象类Card,并不用于实例化 de ...

  9. python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法

    一:string相关:__str__(),__repr__(),__format__() str方法更面向人类阅读,print()使用的就是str repr方法更面对python,目标是希望生成一个放 ...

随机推荐

  1. 关于float和double类型能表示的数据范围和精度分析

    来自教材<计算机组成原理>p16 float:6--7位 double:15--16位 意思就是double类型的数据,你确实能表达出很大的数字,但是其只有15位是精确的. 1.计算机中, ...

  2. Codeforces Round #375 (Div. 2) D. Lakes in Berland 并查集

    http://codeforces.com/contest/723/problem/D 这题是只能把小河填了,题目那里有写,其实如果读懂题这题是挺简单的,预处理出每一块的大小,排好序,从小到大填就行了 ...

  3. (转)Nginx/Apache服务连接数梳理

    Nginx/Apache服务连接数梳理 原文:http://www.cnblogs.com/kevingrace/p/6211542.html 统计连接数,使用netstat命令或ss命令都可以1)统 ...

  4. 合并石子,区间dp

    #define INF 9999999 ],dp[][],ans=,s[]; int main() { scanf("%d",&n); ;i<=n;i++) scan ...

  5. 死磕 java原子类之终结篇(面试题)

    概览 原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换. 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割 ...

  6. Kendo UI 特效概述

    Kendo UI 特效概述 Kendo UI Fx 提供了一个丰富,可扩展,性能经过优化的工具集合用来完成 HTML 元素的过渡显示.每种特效近可能的使用 CSS Transition ,对于一些老版 ...

  7. 如何快速构建CMBD系统-glpi

    一.CMBD系统构建步骤 起初,开发这套CMBD系统是为了帮助朋友公司简化设备统计操作,以代替人工入库方式.举个例子,单位发放笔记本,或者设备更换了硬盘,都需要人工签到,手动输入统计,安装了CMBD系 ...

  8. VC中包含的头文件名不区分大小写

    VC中包含的头文件名,不区分大小写如 #include "my.h" = #include "MY.H".

  9. 云计算的那些「What」

    本文从云计算讲起,介绍了选择云计算的各种理由和一些最基本的概念. 经过十多年发展,云计算早已成为不可阻挡的技术潮流,逐渐深入到各行各业,不同规模的组织中,帮助用户以更低运营成本获得完善高效的 IT 服 ...

  10. 在SharePoint Online或SharePoint本地列表中缺少功能区

    您可能会遇到在SharePoint Online或SharePoint内部部署列表中看不到功能区的情况.功能区可以轻松访问SharePoint列表中的常见任务.它还提供了有用的工具,例如连接到Outl ...