day22 02 面向对象的交互

一、三种编程方式

1.面向过程编程:核心是过程,流水线式思维

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

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

2.面向函数编程:核心是函数

3.面向对象编程:核心是对象,上帝式思维,比较复杂而多的过程用面向对象编程就比较适合

优点:解决了程序的扩展性,对某一个对象单独修改,会立刻反应到整个系统中,修改比较容易

缺点:可控性差,无法像面向过程那样可以很精准的预测问题的处理流程与结果

二、类和对象实例

字典dict----一个类
dict={'k':'v'}----一个对象
list----类
list=[,]----对象
print(dict)----类
print(d)----对象

自定义类:类似自定义函数,自定义类也有一个类名,而在类里面是类的各种属性。通过类名可以去操做和查看里面的属性,方式如下:

class 类名:#可有括号也可无
属性='a'
print(类名.属性)

运行结果:

a

类的调用和传参和一般的函数调用和传参是不同的,下面的方式就是不正确的:

class someone(name,blood,aggr,sex):#这里报错,不接收传的参数,括号不是拿来传参的
pass
person=someone('王昭君',,,'girl')#不能在这里传参数

三、类的调用以及传参的特殊方法

以以下代码为例:

class person:

    country='china'

    def __init__(self,*args):
self.name=args[]
self.blood=args[]
self.aggr=args[]
self.sex=args[] def walk(self,n):
print('%s走过来了,走了%s步'%(self.name,n)) someone=person('王昭君',,,'girl')
print(someone.name)
print(someone.blood)
print(someone.aggr)
print(someone.sex)
print(someone.__dict__)
print(person.country)
print(person.walk(someone,))
print(person.__dict__)
print(person.__dict__['country'])
print(someone.__dict__['name'])
someone.__dict__['name']='蔡文姬'
print(someone.name)
someone.name='蔡文姬'
print(someone.name)
person.__dict__['country']='美国'
print(person.country) #报错,不能修改类下面的静态属性

以下是对应上面的代码添加注释部分,详细的分析整个代码的执行过程,以及一些过程的意义所在:

class person:  #. 定义一个类叫person

    country='China' #创建了一个只要是这个类就一定具有的属性,即共有的属性,也叫静态属性,可以在类下调用

    def __init__(self,*args):
#. _init_初始化方法,里面是自己要写的代码,这里的self可以相当于游戏里面定义人物角色的那个字典someone,
# 里面有人物各种属性,此时的self是空的,拿来放下面的属性以及对应的值;*args拿来接收调用类传入的参数即属性对应的值,也相当于字典里面key对应的值
#self是一个可以存储很多属性的大字典,是一个对象,是必须传的参数
self.name=args[]
#. 将属性以及对应的值放入类中,往字典里面添加属性的方式发生了变化
#左边的self.name是类的属性,相当于someone['name']即someone字典里面的key
#右边的args[]是传入的对应参数,即属性对应的值,也相当于字典里面的name这个key对应的值
self.blood=args[]
self.aggr=args[]
self.sex=args[]
#.这里不用写return返回值,self会以类似字典关系自动将属性以及对应的参数返回给调用的地方 def walk(self,n): #. 类里面定义的一个walk方法,第一个参数一定是类里面的对象self,并且一定要放在第一个,后面还可以传其他
print('%s走过来了,走了%s步'%(self.name,n)) someone=person('王昭君',,,'girl')#对象=类名()#调用类执行类得到对象----实例化,即类名可以实例化对象
#.调用person这个类,并传入参数,参数是属性对应的值
#.接收调用返回来的值,是一个存有类的属性以及参数的大字典赋值给someone,此时的someone是一个具体的对象,也可以说someone=self
print(someone.name)
#.打印对象.属性才能查看属性值,直接打印someone取到的是一个对象的内存地址,someone.name=self.name
print(someone.blood)
print(someone.aggr)
print(someone.sex)
print(person.walk(someone.name,))
#. 调用类里面的walk方法 ,并传入参数,调用的方法:类名.方法名(对象名,其他参数),对象名参数一定要传,并且一定要放在第一个
print(person.country) #调用类person里面的静态属性,类名可以查看类中的属性,不需要实例化就可以查看
print(person.__dict__) #查看类里面的所有方法双下方法
print(someone.__dict__) #查看对象里面所有具体的属性
print(person.__dict__['country']) #以字典的形式查看类里面的属性
print(someone.__dict__['name']) #以字典的形式查看对象里面的属性值
someone.__dict__['name']='蔡文姬' #以字典的方式修改对象的属性值
print(someone.name)
someone.name='蔡文姬' #以对象点属性的方式修改属性值
print(someone.name)
# person.__dict__['country']='美国'
# print(person.country) #报错,不能修改类下面的静态属性

四、小结

对象=类名()

过程:

1.类名()首先会创造出一个对象,创建了一个self变量
2.调用_init_方法,类名括号里面的参数会被在这里接收
3.执行_init_方法
4.返回self

对象能做的事:

1.查看属性
2.调用方法
3._dict_对于对象的增删改查操作都可以通过字典的语法进行

类名能做的事:

1.实例化
2.调用方法:只不过要自己传递self参数
3.调用类中的属性,也就是调用静态属性
4._dict_对于类中的名字只能看 不能操作

day22 02 面向对象的交互的更多相关文章

  1. Java学习笔记:02面向对象-重写_this_super_抽象类

    02面向对象-重写/this/super/抽象类 ****1.this和super 作用: this: 区分本类的成员变量和局部变量同名情况 super:区分父类的成员变量和局部变量同名情况 用法: ...

  2. OC语言-02面向对象的三大特性

    01封装 #import <Foundation/Foundation.h> @interface Student : NSObject { //@public 成员变量尽量不使用 int ...

  3. DAY22、面向对象

    一.复习:1.面向过程与面向对象 过程:程序流程化,可拓展性差 对象:程序流程多样化,可拓展性强 面向对象引入属性 | 方法的概念,通过所属者.语法调用2.拥有名称空间的对象:有__dict__属性, ...

  4. day22:初识面向对象

    1,类可以理解为是一个模子,可以是代码精简,方便增加实例,方便修改,更加规范,能知道具体的属性,方法,但是不知道具体的值 2,对象有具体的值,属性和技能都是根据类规范的 3, 先有类才有对象 4,面向 ...

  5. day24 面向对象,交互,组合,命名空间,初始继承

    面向对象的命名空间: #属性:静态属性 (直接和类名关联或者直接定义在class下的变量) # 对象属性 (在类内和self关联,在类外和对象名关联的变量) # 动态属性(函数) class Foo: ...

  6. JS高级. 02 面向对象、创建对象、构造函数、自定义构造函数、原型

    面向对象的三大特性: 封装 a)  把一些属性和方法装到一个对象里 2.  继承 a)  js中的继承是指:   一个对象没有一些方法和属性,而另一个对象有 把另一个个对象的属性和方法,拿过来自己用, ...

  7. PHP进阶之路 -- 02 面向对象

    PHP进阶之路-- 之 “面向对象” 基础 概念 类的介绍和定义 类的属性 类常量 类的自动加载 构造函数和析构函数 访问控制 对象继承 范围解析操作符 static静态关键字 抽象类 对象接口 Tr ...

  8. Java知识系统回顾整理01基础02面向对象01类和对象

    一.面向对象实例--设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一 ...

  9. Java知识系统回顾整理01基础02面向对象03方法

    一.根据实例给出"方法"的定义 在LOL中,一个英雄可以做很多事情,比如超神,超鬼,坑队友 能做什么在类里面就叫做方法 比如队友残血正在逃跑,你过去把路给别人挡住了,导致他被杀掉. ...

随机推荐

  1. 删除一个ppa

    https://itsfoss.com/how-to-remove-or-delete-ppas-quick-tip/ 总结如下: 1: 桌面删除,进入software & update,然后 ...

  2. pycharm 断点调试

    转自; https://blog.csdn.net/chenggong2dm/article/details/9368641 PyCharm 作为IDE,断点调试是必须有的功能.否则,我们还真不如用纯 ...

  3. 我的spring-boot开发环境

    我的spring-boot开发环境,目的方便我快速搭建开发环境,同时可以最佳实践.使用spring-boot 2.1.x. 代码地址:GitHub my-springboot-examples 目的是 ...

  4. 4-redis数据过期策略

    1 基本 redis也许只是用来存放临时数据.比如股市行情.游戏中一个持续一个月的活动等,都属于缓存数据,过了一段就没用了.如果没有过期策略,就会有大量垃圾数据在内存中堆积. 2 TTL time t ...

  5. redis优势

    redis是高性能的key-value内存数据库. 由于是内存型的,所以性能相比磁盘数据库更加优秀. 由于支持丰富的数据类型,相比memcache更受开发者欢迎.列表和整形是最常用的数据类型. 就算对 ...

  6. awr 收集时间

    windows 收集 awr 报告,一分钟一个.

  7. forward和sendRedirect的区别

    部分内容转自:http://blog.csdn.net/zhouysh/article/details/380364和http://blog.csdn.net/frank_jay/article/de ...

  8. python正则表达式提取中文

    import urllib.requestimport reurl='https://songsearch.kugou.com/song_search_v2?callback=jQuery112407 ...

  9. F. Anton and School 位运算 + 化简

    http://codeforces.com/contest/734/problem/F 因为 x + y = (x & y) + (x | y) 有了这个公式后,然后应该手动模拟一下,把公式化 ...

  10. Java基础50题test4—分解质因数

    [分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1)如果这个质数恰 ...