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

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

汇总

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

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

  1.  
  1. # circle 属性 半径 求周长和面积
  1. from math import pi
  2. class Circle:
  3. def __init__(self,r):
  4. self.r = r
  5. def area(self):
  6. return pi*(self.r **2)
  7. def perimeter(self):
  8. return 2*pi*self.r
  9. c1 = Circle(5)
  10. print(c1.area())
  11. print(c1.perimeter())
  12.  
  13. 78.53981633974483
  14. 31.41592653589793
  1. 定义类
    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. djangoXadmin

    是一个基于admin二次开发的开源组件,但是貌似已经停止开发了. 安装方式:(py3.6,django2.1) 1 先用pip安装xadmin2,它会安装xadmin和一些依赖包 2 用pip卸载xa ...

  2. C# 基础之索引器

    当一个类有数组成员时,索引器将大大简化对类中数组成员的访问 索引器类似于属性有get与set访问器 列如: 使用: 总结:从以上代码可以看出索引器也是对私有字段进行访问的方式,但此时的私有字段是数组类 ...

  3. Tinghua Data Mining 3

    特征选择 男女身高 男女抽烟 先验分布 熵 衡量系统的不确定性 属性的价值 降低了不确定性 降低的幅度越高越好 主成分分析 旋转是的数据间的correlation消失掉 Q是正交阵 七长八短,长宽相关 ...

  4. 牛客练习赛42B(异或的性质)

    传送门 b^ c >= b - c,这个结论应该记住,我还在这里证过…… 这个题就用到了这个结论,假如当前答案集合为S,和为a,异或和为b,当前答案为a+b了.这时又读入个c,该不该加进来?a ...

  5. 1047 - Best couple 好题~

    http://www.ifrog.cc/acm/problem/1047 思路很简单,跑一发floyd,然后再用km. 但是问题来了,这个有可能n != m.那怎么办? 其实可以补上一些不存在的点.来 ...

  6. php设计模式学习之单例模式

    某些应用程序资源是独占的,因为有且只有一个此类型的资源.例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更 ...

  7. Windows7获取、更换桌面背景,C#

    使用的API原型是 BOOL SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni); 在C#中定义如下 ...

  8. Spring框架学习-Spring的AOP概念详解

    一.SpringAOP的概述. AOP(Aspect Oriented Programming),面向切面编程,通过预编译方式和运行期间动态代理实现程序的功能的统一维护的技术.AOP是OOP(面向对象 ...

  9. Java编程基础-面向对象(下)

    一.抽象类 1.引入:当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的.Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用 ...

  10. AngularJs数据绑定原理

    注 这篇博文主要是写给新手的,是给那些刚刚开始接触Angular,并且想了解数据帮定是如何工作的人.如果你已经对Angular比较了解了,那强烈建议你直接去阅读源代码. Angular用户都想知道数据 ...