1、初识面向对象
 
    面向过程:一切以事务的发展流程为中心
 
        优点:负责的问题流程化,编写相对简单
        缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发而动全身。
 
    面向对象:一切以对象为中心,一切皆为对象,具体的某一个事务就是对象。
                    我们面向的不再是事务发展的流程,而是操作某一个事务的个体
 
        优点:可扩展性强,对某一个对象单独修改会立刻反映到整个体系中。对属性和动作修改都很容易
        缺点:编程的复杂度高于面向过程,可控性差。无法像面向过程的程序设计流水线式可以很精准的预测问题的处理流程和结果。
 
面向对象的应用场景:需求经常变化的软件,一般需求都集中在用户层,互联网应用,企业内部软件,游戏等。
 
2、类,对象
 
        类是创建对象的第一步,对象就是通过类来创造的具体的东西。
 
类与对象的关系:类是对事务的总结,抽象的概念,类用来描述对象,对象是类的实例化的结果,对象能执行那些方法都由类来决定,类中定义了什么,对象就拥有什么。
__init__(self,参数)  参数一般作为属性设置给对象,对象就是self,对象性的封装。

def 方法(self,参数):  方法,第一个参数一般是固定的self,当前类的对象

创建类:

class 类名:

    def __init__(self):  # 初始化方法,又被称为构造方法
self.属性 = 值
self.属性 = 值
self.属性 = 值 def fangfa(self):
方法体(函数体,return)

创建对象:

     变量 = 类名()  #实例化  <--> 创建

      变量.属性  # 访问对象的属性信息

      变量.方法()  # 访问类中的方法

下面以造车来举例:

class Car:  # 类名首字母大写,严格遵守驼峰命名规则
pass # 造车
c = Car() #类名() 表示创建对象
c.color = 'red' # 对象.属性 中间的点表示‘的’ ,当属性不存在的时候,相当于添加一个属性
c.paizhao = '京A888888'
print(c.color)
print(c.paizhao) c.color = 'blue' # 当属性存在的时候,是修改属性星系
# 相当于一个字典,属性为key,等号后边的内容为value
class User:

    def __init__(self,username,password):
self.username = username
self.password = password def login(self):
uname = input('请输入用户名:')
passw = input('请输入密码') if uname == self.username and passw == self.password:
print('登陆成功')
else:
print('登陆失败') info = User('zhangmeng','ni123')
info.login()

用面向对象的思维完成用户登录

class User:

    def __init__(self,username,password):
self.username = username
self.password = password def login(self):
uname = input('请输入用户名:')
passw = input('请输入密码') if uname == self.username and passw == self.password:
print('登陆成功')
else:
print('登陆失败') info = User('zhangmeng','ni123')
info.login()
3、面向对象 和面向过程的比对
 
 1、函数式:函数侧重的是功能,将功能封装到函数中,调用方便
 2、面向对象编程:对象侧重的是归类;对整个系统进行分析,分析出需要哪些对象,然后给对象进行分类
先写类,然后使用类创建对象,最后用对象去执行相关操作。
 
 
python同时支持面向对象和面向过程:
    如果写一些比较小的程序用面向对象,程序很复杂,很庞大,建议用面向过程
 
4、面向对象的三大特征
 
   封装
 
        把很多数据封装到一个对象中,把固定功能的代码封装到一个代码块,函数。对象,打包成模块
 
        1、对属性的封装(__init__())
                 self.xxx = xxx
         2、对方法和功能的封装
class Student:
def __init__(self,name,ID,grade):
self.name = name
self.ID = ID
self.grade = grade stu1 = Student('张欣','','三年级') # 把多个信息(值)保存在一个对象中
stu2 = Student('黄瑶','','六年级') def choose(s):
print('选择%s去参加竞赛'%s.name) choose(stu1)
 
继承
 
        子类自动拥有父类中除了私有属性外的其他所有内容,对父类进行扩展。
        父类的对象不能执行子类中的功能
 
        当出现x是一种y的时候,推荐使用继承关系
 
        python支持多继承,查找顺序:先找离它近的
class foo:
def getmoney(self):
print('快到碗里来') class bar(foo):
pass c = bar()
c.getmoney()
# 快到碗里来
多态
 
        同一个对象,多种形态。
 
        好处:程序具有超高的可扩展性,面向对象思想的核心与灵魂,python自带多态。
# 封装,继承,多态

class Animal:
def run(self):
print('动物在跑') def chi(self):
print('动物在吃') class Cat(Animal): def __init__(self,name,color,hobby):
self.name = name
self.color = color
self.hobby = hobby class Dog(Animal):
def __init__(self,name,color,hobby):
self.name = name
self.color = color
self.hobby = hobby def chi(self):
print('吃吃吃') c = Cat('xiaomei','红色','偷吃鱼')
d = Dog('budian','黑色','咬东西') def func(ani):
ani.chi() func(c)
func(d)

 
 

python - 初识面向对象的更多相关文章

  1. Python初识面向对象

    初识面向对象 面向过程 VS 面向对象 面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点是:极大的降低 ...

  2. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...

  3. python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)

    一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...

  4. python全栈开发从入门到放弃之初识面向对象

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  5. 巨蟒python全栈开发-第16天 核能来袭-初识面向对象

    一.今日内容总览(上帝视角,大象自己进冰箱,控制时机) #转换思想(从面向过程到面向对象) 1.初识面向对象 面向过程: 一切以事物的发展流程为中心. 面向对象: 一切以对象为中心,一切皆为对象,具体 ...

  6. python基础(23):面向过程与面向对象的优劣、初识面向对象

    1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...

  7. Python 入门 之 初识面向对象

    Python 入门 之 初识面向对象 1.初识面向对象编程 (核心--对象) (1)观察以下代码: # 面向过程编程 s = "alexdsb" count = 0 for i i ...

  8. 【学习笔记】--- 老男孩学Python,day16-17 初识面向对象,类名称空间,查询顺序,组合

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  9. python学习之老男孩python全栈第九期_day022知识点总结——初识面向对象

    一. 面向对象的引入# 人狗大战 def person(name,HP,aggr,sex): person = { 'name':name, # 昵称 'HP':HP, # 生命值 'aggr':ag ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20165316 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165316 Exp4 恶意代码分析 一.原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2 ...

  2. nginx 环境不支持thinkPHP

    在linux+Nginx+mysql+PHP 新装的服务器下,不支持重写pathinfo功能 . 需要加入这个代码 让Nginx 支持重写功能 location / { if (!-e $reques ...

  3. 解决 IntelliJ IDEA Tomcat 控制台中文输出乱码问题

    解决办法 找到安装IDEA的bin目录将idea.exe.vmoptions和idea64.exe.vmoptions两个文件打开分别在文件最末尾添加-Dfile.encoding=UTF-8

  4. 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛) H XOR

    链接:https://www.nowcoder.com/acm/contest/116/H来源:牛客网 题目描述 Once there was a king called XOR, he had a ...

  5. pkuwc2019游记

    填坑 为了打击胡吹瞎吹恶势力 具体考试情况略了 题解 Day1 D1T1 100分 状压dp 考虑用点的存在状态转移边的情况的思想 D1T2 100分 虚树+ntt 假设在最下方的斯坦纳树上统计答案, ...

  6. xtrabackup 2.4.3 BUG

    用XtraBackup对备份集进行apply log 的时候,卡在 xtrabackup 版本:2.4.3 InnoDB: Waited for 1535930 seconds for 128 pen ...

  7. EECS 649 Introduction to Artificial Intelligence

    EECS 649 Introduction to Artificial IntelligenceExamElectronic Blackboard Submission Due: April 24, ...

  8. java为什么要重写hashCode和equals方法?

    如果不被重写(原生)的hashCode和equals是什么样的? 不被重写(原生)的hashCode值是根据内存地址换算出来的一个值. 不被重写(原生)的equals方法是严格判断一个对象是否相等的方 ...

  9. Linux 设置系统时间和时区2.Ubuntu

    查看当前时间状态 timedatectl status 设置时区 sudo dpkg-reconfigure tzdata Asia shanghai

  10. Eclipse中Lombok的安装和注解说明

    Lombok 可用来帮助开发人员消除 Java 的重复代码,尤其是对于简单的 Java 对象(POJO),比如说getter/setter/toString等方法的编写.它通过注解实现这一目的. 官网 ...