面向对象

1. 概念

面向对象(object-oriented ;简称: OO) 至今还没有统一的概念 我这里把它定义为: 按人们 认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
# 程序是由数据和功能组合而成的对象构建起来的# 面向对象编程(Object Oriented Programming-OOP) 是一种解决软件复用的设计和编程方法。
这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的型式描述出来,
# 以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

2.详解

举个例子:菜鸟买电脑

第一种方式:

1在网上查找资料

2根据自己预算和需求定电脑的型号 MacBook 15 顶配 1W8

3去市场找到苹果店各种店无法甄别真假 随便找了一家

4找到业务员,业务员推荐了另外一款 配置更高价格便宜,也是苹果系统的 1W

5)砍价30分钟 付款9999

6)成交

回去之后发现各种问题

第二种方式 :

1)找一个靠谱的电脑高手

2)给钱交易

以上第一种方式是面向过程强调的是步骤、过程、每一步都是自己亲自去实现的。第二种方式是面向对象。 强调的是电脑高手, 电脑高手是处理这件事的主角,对我们而言,我们并不必亲自实现整个步骤,只需要调用电脑高手就可以解决问题 这种解决问题的思路就 是面向对象

  • 面向过程:根据业务逻辑从上到下写代码,

  • 面向对象:对数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程

  • 面向对象和面向过程都是解决问题的一种思路而已

    • 当遇到一个需求的时候不用自己去实现,如果自己一步步实现那就是面向过程
    • 应该找一个专门做这个事的人来做
    • 面向对象是基于面向过程的

怎么将面对对象带入到编程中去?

答案就是 ---- 类


1.类基本概念及理解

# 类是对象的抽象化,类是一群具有相同特征或行为的事物的统称。

2.类的定义:

class 类名():pass# 1.命名规则:驼峰命名法(首字母大写)class Person():pass# 2.调用:类的实例化
class Person():pass# 实例化
wum = Person()  # wum是Person类的一个实例对象
mar = Person()  # 同理

3.类与实例属性

dir: 查看对象的属性及方法信息

​ 类可以看作是独立存放(属性及方法)的空间。

​ 类就像人拥有其独特的特性(属性)以及行动(方法)

实例对象可以获得类中所有的属性及方法

class Person():varl = '我会说人类语言,还有帅气的五官'Person.vars = '手脚'
wum = Person()print(wum.varl)   # 调用属性


class Person():varl = '我会说人类语言,还有帅气的五官'wum = Person()wum.varl = '手脚'print(wum.varl) # 手脚# 在查找属性时,会优先在实例中查找,然后在类中查找,
# 也就代表实例与类属性名相同时,优先取决实例属性值


class Person():varl = '我会说人类语言,还有帅气的五官'wum = Person()
# Person.varl = '快乐'  # 修改类属性
# print(wum.varl)  # 快乐
# 修改类属性,对应的实例中的也变了wum1 = Person()
# Person.sex = '男'
# print(wum1.sex)  # 男
# 类添加属性, 对应的实例也会有对应的属性wum2 = Person()
# wum2.name = '帅'
# print(wum2.name)  # 帅
# print(Person.name)  # 报错:AttributeError: type object 'Person' has no attribute 'name'
# 实例对象可以继承类中所有的东西,但是实例对象并不会影响类,且实例对象与实例对象之间互不影响

4.类与实例之间的联系

# 1.类时一个事物的抽像,不是真实存在的,描绘了事物的共性# 2.实例:某个事物的具体个体,是该类事物的具体表现,真实存在实例也是存放变量的空间,不同实例之间互不可见class Person():varl = '大脑' wum = Person()
mor = Person()wum.age = 18print(wum.age)
print(mor.age)
print(Person.age)# 实例的特征方为属性

5.私有属性

注意:_ 和 __这是一种规范(约定), 没有真正的限制作用

1.概念:

1.属性前加'_'一个下划线,外部可以直接访问
1.属性前加'__'两个下划线,外部不可以直接访问# 这是一种规范,并非限制
# 定义在类中的私有属性也可以被子类继承

2.深入理解

class Person():_age = 18__sex = '男'wum = Person()
print(dir(wum))  # 不能直接访问需要查看其在类中的名字形式
print(wum._age)
print(wum.__sex)通过dir查看可以发现:__sex 的访问变成 _Person__sex# __可以间接访问及修改

6.方法

  • 类属性就是针对 类对象定义的属性

    • 使用 赋值语句class 关键字下方可以定义 类属性
    • 类属性 用于记录 与这个类相关 的特征
  • 类方法就是针对 类对象定义的方法
    • 类方法 内部可以直接访问 类属性 或者调用其他的 类方法

# self代表实例本身, 这个特殊的禁止乱命名
class Person():def eat(self):print('吃')
wum = Person()
wum.eat()  # 调用方法
# 实例方法代表实例的行为
# 与函数传参一样,只会先传一个自身的实例selfclass Person():def eat(self):print(f'吃---{self.name}')wum = Person()
wum.name = '风'
wum.eat()  # 调用方法
class Person():def eat(self, name):print(f'吃---{name}')wum = Person()
wum.eat('风')  # 调用方法,传参
'实例方法'的调用过程与self:1.通常将默认会传入的那个参数命名为self# 用来表示调用这个方法的实例对象本身2.方法总是定义在类中,但是却叫实例方法,因为它表示该类所有实例共有的行为

7. 初始化

  • 初始化方法__init__
  • 初始化触发条件:实例化时,对象出现后

class Person():def __init__(self, name):   # 初始化方法self.name = nameself.age = 18def eat(self):print(f'{self.name}吃肉')wum = Person('风')  # 实例化触发
wum.eat()print(dir(wum))
print(dir(Person)# 初始化我们一般是对实例对象进行添加属性,属性值可以在实例化传入也可写成固定值

8.私有属性修改操作

class Person():def __init__(self, name):   # 初始化方法self.name = nameself.__age = 18def set_age(self, ages):"""修改age属性:param ages: 修改值:return: """self.__age = agesdef get_age(self):"""查询私有属性 age值:return: 返回查询到的 私有属性 age值  -- data"""data = self.__agereturn datawum = Person('快乐')print(dir(wum))  # 私有属性  __age ---->  _Person__age# 想要改变私有属性另一种方法就是通过定义方法,通过方法直接修改
# -------- 在类方法中可直接访问私有属性 ------data1 = wum.get_age()  # 查
print(data1)  # 18wum.set_age(22)  # 改data2 = wum.get_age()  # 查
print(data2)  # 22

16.面向对象-基础相关推荐

  1. java中sum=a+aa+aaa_Java面向对象基础IO系统

    Java面向对象基础–IO系统 一.IO 输入:input 输出:output Java的IO主要包含三个部分 流式部分:IO的主题部分 非流式部分:主要包含一些辅助流式部分的类 文件读取部分的与安全 ...

  2. PHP面向对象基础总结

    近来参加了几场PHP工程师的面试,但是笔试题答得都不理想,回来总结了一下失败的原因,是没看PHP手册.几家公司的PHP基础面试题都可以在PHP手册上找到.哎,现在才知道最好的面试宝典是PHP手册. 下 ...

  3. java面向对象课件_《JAVA面向对象基础》PPT课件.ppt

    <<JAVA面向对象基础>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<JAVA面向对象基础>PPT课件.ppt(68页珍藏版)>请在人人文库 ...

  4. 第六章、面向对象基础--中(续)构造器、this、包、eclipse的使用

    文章目录 内容 学习目标 第六章 面向对象基础--中(续) 6.2 构造器(Constructor) 构造器的作用 构造方法的定义格式 注意事项 练习 6.3 this关键字 this的含义 this ...

  5. 跟着王进老师学开发Python篇第四季:面向对象基础篇-王进-专题视频课程

    跟着王进老师学开发Python篇第四季:面向对象基础篇-772人已学习 课程介绍         本季课程为Python面向对象基础篇,内容包含:面向对象的介绍.创建类和实例化.实例变量和实例方法.类 ...

  6. 01 PHP面向对象基础

    转载于:黑马程序员武汉中心 面向对象基础 文章目录 面向对象基础 一.面向对象编程思想 **二.面向对象基础** **1.面向对象关键字说明** **2.面向对象简单技术实现** **3.类成员** ...

  7. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性就是指对外部不可见,用对象直接访问类中的属性,在面向对象法则中 ...

  8. Javascript基础与面向对象基础~第四讲 Javascript中的类对象

    今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声"抱歉"!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一 ...

  9. JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...

    6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...

最新文章

  1. jmeter mysql plugin_安装一个jmeter的插件--实现监控事务响应时间、tps等功能
  2. timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP
  3. 假期休闲,来发贪吃蛇!(Win32控制台版)
  4. windows主机防护
  5. 1019:浮点数向零舍入
  6. android monitor不能查看/data目录
  7. 深度学习及AR在移动端打车场景下的应用
  8. 如何释放hdfs中的续租_装修中甲醛如何高效释放
  9. 通过编译php为httpd的模块实现lamp
  10. ubuntu14.04部署kickstart
  11. oracle select into from 用法,数据库插入数据之select into from与insert into select区别详解...
  12. java实现九九乘法表
  13. google 输入栏不显示历史搜索记录方法
  14. 每天一道面试题--- js 中 this 指针的用法
  15. 大神见地:Jeff Dean展望AI的5大趋势!
  16. stringstream切割字符串
  17. httpclient Accept-Encoding 乱码
  18. 设计模式原则 - 迪米特法则(六)
  19. go time.after
  20. 古墓里出土的那些奇怪文物,能否证明穿越的存在?

热门文章

  1. 硬件工程师成长之路(0)----认识元件
  2. 编码器 协议不公开_公开编码的3种后果
  3. spring源码解析--环境搭建
  4. 冷却水的循环方式有哪几种_循环水处理设备冷却系统分为哪些
  5. 阿里图标字体库的动态使用Android
  6. 图像处理用什么神经网络,神经网络图像处理
  7. RO/RW/ZI区别及在mcu中的存储分配
  8. 普迪文集团:马来西亚留学必须了解的7个真相
  9. win10投影到此电脑显示灰色解决办法
  10. 通过简单的强化学习实现井字棋(Tic-Tac-Toe)