def Person(name,blood,aggr,sex):

    person = {
'name' : name,
'blood':blood,
'aggr': aggr,
'sex' : sex,
}
def attack(dog):
dog['blood'] -= person['aggr']
print('%s被打了,掉了%s的血' % (dog['name'],person['aggr']))
person['attack'] = attack
return person #是精简了,方便增加人物,方便修改, 人物更加规范
def Dog(name,blood,aggr,kind):
dog = {
'name' : name,
'blood':blood,
'aggr': aggr,
'kind' : kind,
}
def bite(person):
person['blood'] -= dog['aggr']
print('%s被咬了,掉了%s的血' % (person['name'],dog['aggr']))
dog['bite'] = bite
return dog
#攻击技能 打
# def attack(person,dog):
# dog['blood'] -= person['aggr']
# print('%s被打了,掉了%s的血' % (dog['name'],person['aggr'])) #咬人 咬
# def bite(dog,person):
# person['blood'] -=dog['aggr']
# print('%s被咬了,掉了%s的血' % (person['name'],dog['aggr'])) tim = Person('tim',300,1,'None')
nezha = Person('哪吒',300,3, '不详')
jin = Dog('金喇叭',1000,200,'teddy')
print(jin)
jin['bite'](nezha)
tim['attack'](jin)
Dog函数和Person函数,都是定义了一类事务
直到调用了函数,赋值后才真的有了一个实实在在的人或狗
面向对象编程
所谓模子就是类,类是抽象的,我能知道有什么属性,有什么技能,但不能知道属性具体的值
jin tim nezha 就是对象,有具体的值,属性和技能都是根据类规范的 初识面对对象
class 类名:
属性 = 'a'
类名.属性
类名的作用 就是操作属性,查看属性
class Person:
def __init__(self,*args):
self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
tim = Person('tim',300,1,'None') #tim是个对象 实例化
print(tim.name)
print(tim.hp)
print(tim.aggr)
print(tim.sex) tim
300
1
None
对象  =类名()
过程:
类名() 首先会创造出一个对象,创建了一个self变量
给调用init方法,类名括号里的参数会被这里接收
执行init方法
返回self
class Person:
def __init__(self,*args):
# print(self.__dict__) #self就是一个可以存储很多属性的大字典
self.name = args[0] #往字典里添加属性的方式发生了一些变化
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
# print(self.__dict__)
def walk(self):
print('%s走走走'%self.name)
tim = Person('tim',300,1,'不详') #tim是个对象 实例化
# print(tim.__dict__)
# print(Person.__dict__)
Person.walk(tim) tim走走走

class Person:
def __init__(self,*args):
# print(self.__dict__) #self就是一个可以存储很多属性的大字典
self.name = args[0] #往字典里添加属性的方式发生了一些变化
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
# print(self.__dict__)
def walk(self,n):
print('%s走走走,走了%s步'%(self.name,n))
tim = Person('tim',300,1,'不详') #tim是个对象 实例化
# print(tim.__dict__)
# print(Person.__dict__)
# Person.walk(tim) #调用方法,类名.方法名(对象名)
tim.walk(5) #Person.walk(tim)

汇总

class Person:           #类名
country = 'China' #创造了一个只要是这个类一定有的属性,这个属性叫类属性,也叫静态属性
def __init__(self,*args): #初始化方法,self是对象,是一个必须传的参数
# print(self.__dict__) #self就是一个可以存储很多属性的大字典
self.name = args[0] #往字典里添加属性的方式发生了一些变化
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
# print(self.__dict__)
def walk(self,n): #方法 一般情况下必须传self参数且必须写在第一个,后面还可以传其他参数,是自由的
print('%s走走走,走了%s步'%(self.name,n))
tim = Person('tim',300,1,'不详') #类名还可以实例化对象,tim是个对象 实例化
# print(tim.__dict__)
# print(Person.__dict__)
# Person.walk(tim) #调用方法,类名.方法名(对象名)
print(Person.country) #类名 可以查看类中的属性,不需要实例化就可以查看
tim.walk(5) #Person.walk(tim) #调用方法,类名.方法名(对象名)
print(tim.name) #查看属性值
print(tim.hp)
print(tim.aggr)
print(tim.sex)
#.__dict__方法
print(Person.__dict__)
print(tim.__dict__)
print(Person.__dict__['country'])
print(tim.__dict__['name'])
tim.__dict__['name'] = '二哥'
print(tim.__dict__)
print(tim.name) {'walk': <function Person.walk at 0x005B01E0>, 'country': 'China', '__doc__': None, '__init__': <function Person.__init__ at 0x005B02B8>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__dict__': <attribute '__dict__' of 'Person' objects>}
{'hp': 300, 'sex': '不详', 'name': 'tim', 'aggr': 1}
China
tim
{'hp': 300, 'sex': '不详', 'name': '二哥', 'aggr': 1}
二哥
class Person:           #类名
country = 'China' #创造了一个只要是这个类一定有的属性,这个属性叫类属性,也叫静态属性
def __init__(self,*args): #初始化方法,self是对象,是一个必须传的参数
# print(self.__dict__) #self就是一个可以存储很多属性的大字典
self.name = args[0] #往字典里添加属性的方式发生了一些变化
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
# print(self.__dict__)
def walk(self,n): #方法 一般情况下必须传self参数且必须写在第一个,后面还可以传其他参数,是自由的
print('%s走走走,走了%s步'%(self.name,n))
tim = Person('tim',300,1,'不详') #类名还可以实例化对象,tim是个对象 实例化print(tim.name)
tim.name = '二哥'
print(tim.name)
print(tim.__dict__)
tim.age = 83     #增加属性
print(tim.__dict__)
对象  =类名()
过程:
类名() 首先会创造出一个对象,创建了一个self变量
给调用init方法,类名括号里的参数会被这里接收
执行init方法
返回self
对象能做的事情:
查看属性
调用方法
.__dict__对于对象的增删改查操作都可以通过字典的语法进行
类名能做的事情:
实例化
调用方法,只不过要自己传递self参数
调用类中的属性
调用类中的属性,也就是调用静态属性
__dict__对于类中的名字只能看不能操作
练习
class Person:
def __init__(self,name,age,sex):
self.name =name
self.age = age
self.sex = sex
def shangshan(self):
print('%s,%s岁,%s,上山去砍柴'%(self.name,self.age,self.sex))
def drive(self):
print('%s,%s岁,%s,开车去东北'%(self.name,self.age,self.sex))
def favor(self):
print('%s,%s岁,%s,最爱大保健'%(self.name,self.age,self.sex)) ming = Person('小明','','男')
ming.shangshan()
ming.drive()
ming.favor()
zhang = Person('老张','','男')
zhang.shangshan()
zhang.drive()
zhang.favor()

小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老张,90岁,男,上山去砍柴
老张,90岁,男,开车去东北
老张,90岁,男,最爱大保健

 
# circle 属性 半径  求周长和面积
from math import pi
class Circle:
def __init__(self,r):
self.r = r
def area(self):
return pi*(self.r **2)
def perimeter(self):
return 2*pi*self.r
c1 = Circle(5)
print(c1.area())
print(c1.perimeter()) 78.53981633974483
31.41592653589793
定义类
init方法
self是什么 self拥有的属性都属于对象
类中可以定义静态属性
类中可以定义方法,方法都有一个必须穿的参数self
实例化
实例就是对象
对象查看属性
使用对象调用方法

Python9-面对对象1-day22的更多相关文章

  1. 跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解

    面对对象常用的一些关键子:http://www.cnblogs.com/xishaonian/p/6146794.html排版不是很好望见谅. THE END

  2. python面对对象编程----2:__init__

    面对对象编程估计我们最早接触到的就是__init__了,也就是实例的初始化处理过程: 1:来看看最基础的__init__ class Card(object): #抽象类Card,并不用于实例化 de ...

  3. Javascript面对对象. 第一篇

    Javascript,有两个种开发模式: 1.函数式(过程化)2.面对对象(oop),面对对象语言有一个标志,就是类,而通过类可以创建任何多个属性和方法,而Ecmascript没有类的概念,因此它的对 ...

  4. Java入门——(2)面对对象(上)

      关键词:面对对象.类..构造方法.this.static.内部类   一.面对对象的概念:把解决的问题安装一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.其特点可概括为封装性.继承 ...

  5. Day-8: 面对对象编程

    面对过程的程序设计方法意在将函数分成子函数,再依次调用这些函数来解决问题. 而面对对象的程序设计方法,来源于自然界,类是实例的抽象,实例是类的具体.自定义出来的对象是类,而所有的数据都可以看成是对象, ...

  6. java基础--面对对象

    面对对象--概述 什么是对象? +---->对象可以泛指一切现实中存着的事物 +---->类是对象的抽象集合 什么是面对对象? +--->万物皆对象,面对对象实际就是人与万物接触== ...

  7. Python进阶_面对对象&面对过程

    这节主要讲面对对象与面对过程两种编程思想的主要区别. 一. 简单对比 面向过程是一种基础的方法,它考虑的是实际的实现步骤,一般情况下,面向过程是自顶向下逐步求精,其最重要的是模块化的思想方法. 面向对 ...

  8. python面对对象(不全解)

    面对对象:以人类为例,人类通用功能:吃喝拉撒,就可以封装成一个类,不同功能:嫖赌毒,就是对象的不同功能.继承,多态… 上码 class Person(object): def __init__(sel ...

  9. C语言面对对象设计模式汇编

    面向对象发展到今天,已经出现了许许多多优秀的实践.方法和技术.很多的技术都能够有效的提高软件质量.IBM上的<面向对象软件开发和过程>系列文章对面对对象设计从如下层面进行了详细的介绍:代码 ...

  10. python面对对象

    面对过程VS面对对象 面向过程的程序设计的核心是过程,过程就是解决问题的步骤,面向过程的设计就是考虑周全什么时候处理什么东西 优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. ...

随机推荐

  1. hashlib 实现加密

    实现代码 import hashlib # hashlib是一个python用于给数据加密的包,内有很多加密方式,包括md5,sha1, sha224, sha256, sha384, sha512等 ...

  2. python 基础(三) 程序基本流程

    流程控制 流程结构分为3种 顺序结构 分支结构 循环结构 一  分支结构 (1) 单一条件分支 主体结构: if 条件表达式:   #为真得代码块   (2) 双向条件分支 主体结构: if 条件表达 ...

  3. 利用arguments对象在javaScript中实现重载(overload)

    一些概念: 重载(overload): 什么是: 相同函数名,不同参数列表的多个函数,在调用时,可根据传入参数的不同,自动选择对应的函数调用! 为什么: 减轻调用者的负担,一个函数名,可执行多种操作 ...

  4. python之模块random,time,os,sys,序列化模块(json,pickle),collection

    引入:什么是模块:   一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类型. 1.使用python编写的代码(.py ...

  5. 生产环境中mysql+keepalive双主模式,keepalive守护进程实现双主切换提供数据库服务

    mysql+keepalive实现浮动地址自动切换,由于keepalive无自带健康检查功能,所以必须自动编写健康检查守护进程(监控DB1和DB2数据库的监控状态,来保证浮动地址双机自动切换.) 一, ...

  6. springBoot + mybatis实现执行多条sql语句出错解决方法

    在Idea中执行多条sql语句的修改(mybatis默认的是执行sql语句是执行单条,所以要执行多条的时候需要进行配置) 需要在连接字符串中添加上&allowMultiQueries=true ...

  7. GIT本地pull远程失败,本地tag与远程仓库不匹配问题

    2019-05-15 问题现象: 1.GIT本地目录无法pull下远程仓库已新增的内容,一直提示Already up to date  2.git log 命令显示没有远端的tag版本 $git lo ...

  8. LPCTSTR和CString的关系

    类型理解 LPCTSTR类型: L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都 ...

  9. EJB配置jboss数据源

    1.数据源的模板在\jboss-4.2.3.GA-jdk6\jboss-4.2.3.GA\docs\examples\jca\下2.编辑数据源文件,比如mysql-ds.xml,命名规则是名称-ds. ...

  10. Windows 8.1 explorer.exe 出错 “Application Hang”

    不知道为什么explorer常常会卡一下 看系统日志发现有来源于“Application Hang”的错误 部分常规信息: 程序 explorer.exe 版本 6.3.9600.17415 停止与 ...