初识面向对象

面向过程 VS 面向对象

面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西

优点是:极大的降低了写程序的复杂度,只需要顺着执行步骤,堆叠代码即可。

缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而东全身

应用场景:一旦完成基本很少改变的场景,著名例子有Linux内核,git,以及Apache HTTP Server等

面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里时间存在的万物皆为对象,不存在的也可以创造出来。

面向对象的程序设计的:

优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特性和技能修改都很容易缺点:可控性查,无法向面向过程的圣墟设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏都是面向对象程序设计大显身手的好地方

**了解Python中面向对象的一些名词类、对象、实例、实例化

类:具有相同特性的一类事物对象/实例:具体的某一个事物

实例化:类--->对象的过程

类和对象

Python中一切皆为对象,类型的本质就是类。

在Python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是“类”,对象则是这一类事物中具体一个。

类的相关知识

类声明

  1. '''
  2. class 类名:
  3. '类的文档字符串'
  4. 类体
  5. '''
  6.  
  7. #我们创建一个类
  8. class Data:
  9. pass
  10.  
  11. class Person: #定义一个人类
  12. role = 'person' #人的角色属性都是人
  13. def walk(self): #人都可以走路,也就是有一个走路方法,也叫动态属性
  14. print("person is walking...")

类的两种作用:属性引用和实例化

属性引用(类名.属性)

  1. class Person: #定义一个人类
  2. role = 'person' #人的角色属性都是人
  3. def walk(self): #人都可以走路,也就是有一个走路方法
  4. print("person is walking...")
  5.  
  6. print(Person.role) #查看人的role属性
  7. print(Person.walk) #引用人的走路方法,注意,这里不是在调用

实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

实例化的过程就是类--->对象的过程

对象名 = 类型(参数)

关于self

self:在实例化时自动将对象/实例本身传给__init__的第一个参数,

类命名空间与对象、实例的命名空间

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性。

而类有两种属性:静态属性和动态属性

-静态属性就是直接在类中定义的标量

-动态属性就是定义在类中方法


其中类的数据属性是共享给所有对象的

而类的动态属性是绑定到所有对象的

创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后找不到就抛出异常。

1、访问对象的属性

以下列出了几个内建方法,可以用来检查或是访问对象的属性

dir([obj]):

调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。

hasattr(obj,attr):

这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值

getattr(obj,attr):

调用这个方法将返回obj中名为attr值的属性值,例如如果attr为'bar',则返回obj.bar

srtattr(obj,attr,val):

调用这个方法将给obj的名为attr的值的属性赋值为val。例如attr为'bar',则返回obj.bar

2、访问对象的元数据

当你对一个你构造的对象使用dir()时,可能会发展列表中的很多属相并不是你定义的。这些属性一般都保存了对象的元数据,比如类的__name__属性保存了类名。大部分这些属性都可以修改,不过改动它们的意义并不是很大;修改其中某些属性如function.func_code还可能导致很难发现的问题

2.0、确定对象的类型

在types模块中定义了全部的Python内置类型,结合内置方法isinstance()就可以确定对象的具体类型了。

isinstance(object,classinfo):

检查object是不是classinfo中列举出的类型,返回布尔值。classinfo可以是一个具体的类型,也可以是多个类型的元祖和列表

2.1、模块(module)

__doc__:文档字符串。如果模块没有文档,这个值是None

__name__:始终是定义时的模块名;即使你使用import .. as为它取了别名,或是赋值给了另一个变量名

__dict__:包含了模块里可用的属性名-属性的字典;也就是可以使用模块名.属性名访问的对象

__file__:包含了该模块的文件路劲。需要注意的是内建的模块没有这个属性,访问它会抛出异常!

__bases__:父类对象的元祖;但不包含继承树更上层的其他类,比如父类的父类

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

  1. python - 初识面向对象

    1.初识面向对象       面向过程:一切以事务的发展流程为中心           优点:负责的问题流程化,编写相对简单         缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...

  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. 009-Spring Boot全局配置跨域请求支持

    1.Spring Boot 2.0以前全局配置跨域主要是继承WebMvcConfigurerAdapter @Configuration public class CorsConfig extends ...

  2. layui时间控件闪退的问题

    项目上线,发现后台管理系统layui的子页面出现时间控件闪退的问题,根本选取不到时间. 其原因是:如果出现页面找到多个节点,只有第一个节点能正常使用后面的节点都会闪退,可以理解为目前laydate不支 ...

  3. 译文:A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation

    A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation 众所周知,将来自多个传感器的信息融合用于机器人导航 ...

  4. SFTP服务配置以及命令/代码操作

    POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...

  5. MySQL 8中使用全文检索示例

    首先建议张册测试用的表test,并使用fulltext说明将title和body两列的数据加入全文检索的索引列中: drop table if exists test; create table te ...

  6. git 操作说明

    第一步:代码提交到本地仓库 第二步:更新远程服务器代码到本地,如果有冲突需要优先解决,解决冲突后执行第一步操作 第三步:推送本地代码到远程服务器,可以使用source Tree 或者工具自带的配置gi ...

  7. 修正线性单元(Rectified linear unit,ReLU)

    修正线性单元(Rectified linear unit,ReLU) Rectified linear unit 在神经网络中,常用到的激活函数有sigmoid函数f(x)=11+exp(−x).双曲 ...

  8. nginx 配置参数详细说明

    #定义Nginx运行的用户和用户组 user www www; # #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; # #全局错误日志定义类型,[ debu ...

  9. Asp.Net Core Identity中基于角色授权

    我们已经在之前介绍了简单的授权是在Controller或Action上添加属性Authorize来实现,那角色授权是在指定Authorize的同时指定Roles参数. 我们来看看基于角色访问的三种方式 ...

  10. 创建一个用目录分层的Rust应用

    一:前言,这是Rust基础程序,主要是用来讲解怎么创建分层(类似Java package)的应用: 二:代码实现: 2.1在src下创建main.rs,然后声明main方法,代码如下: fn main ...