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. Centos 7.x 配置Gitlab

    GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 1. 安装并配置必要的依赖关系 如果你想使用 Postfix 发送邮件,请在安装过程中根 ...

  2. 用JS改变页面中b标签的样式啊 样式的等

    用JS改变页面中b标签的样式啊 样式的等    ,实际上是在标签内加上样式 ,用媒体查询的话 ,不能生效 <!DOCTYPE html> <html lang="en&qu ...

  3. Python标准库 datetime

    >>> import datetime >>> now = datetime.datetime.now() >>> now datetime.da ...

  4. Educational Codeforces Round 18 D

    Description T is a complete binary tree consisting of n vertices. It means that exactly one vertex i ...

  5. loj124 除数函数求和 1

    loj124 除数函数求和 1 https://loj.ac/problem/124 $\sum_{i=1}^n(\sum_{d|i}d^k)=\sum_{i=1}^n(i^k*{\lfloor}{\ ...

  6. printf格式化输出参数

    1.类型 类型字符用以表示输出数据的类型,其格式符和意义如下表所示: 格式字符 意义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进 ...

  7. 492 Construct the Rectangle 构建矩形

    详见:https://leetcode.com/problems/construct-the-rectangle/description/ C++: class Solution { public: ...

  8. pyton 基础,运算符及字符类型。

    一.python运算符: 二.数据类型: 1.数字: int  :整型 32位机器上一个整数取值范围为-2**31~2**31-1即-2147483648~2147483647 64位机器上一个整数取 ...

  9. WPF日常需要使用的操作

    窗体如何居中弹出 在窗体上添加属性  WindowStartupLocation="CenterScreen" 窗体如何隐藏掉windows边框 添加属性WindowStyle=& ...

  10. Git使用简析

    推送本地操作 初始化一个本地Git仓库,在需要添加版本控制的文件夹根目录中使用git init命令. 添加文件到本地Git仓库: git add 文件名 # 添加文件到暂存区 git add . # ...