2019独角兽企业重金招聘Python工程师标准>>>

一:类和对象

类就是一类事物

对象:具体的事物

比如人是一类,而具体叫某某名字的是对象

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

一:初识

声明一个类  class小写。类名大写加:,()可写可不写

class Person:   #定义一个人类      Person是类名
    role = 'person'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法,也叫动态属性
        print("person is walking...")

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

一:属性引用(类名.属性)

class Person:  # 定义一个人类
    role = 'person'  # 人的角色属性都是人

    def walk(self):  # 人都可以走路,也就是有一个走路方法
        print("person is walking...")print(Person.role)  # 查看人的role属性
print(Person.walk)  # 引用人的走路方法,注意,这里不是在调用

二:加强版(类作用,理论知识)

class Person:    # 类名 Person
    role = '人'  # 类的静态变量 是所有的对象共享的一个属性
    def attack(self):pass
print(Person.role)   # 类提供给我们的调用方式
print(Person.attack)
Person.role = '中国人'
print(Person.role)
Person.attack()   # 报错
print(Person.__dict__) # 存储方式
print(Person.__dict__['role'])
print(Person.__dict__['attack'])
Person.__dict__['role'] = '人'

类只有两个作用:
    1.使用类中的名字查看类中的名字:
        类名.变量名                # 可以修改变量的值
        类名.__dict__['变量名']   # 不能修改
    2.创造对象  实例化对象对象就是实例,一个实际的例子对象 = 类名()
class Person:    # 类名 Person
    role = '人'  # 类的静态变量 是所有的对象共享的一个属性
    def __init__(self,name,sex,aggr,hp):  #{}
        self.name = name
        self.sex = sex
        self.aggr = aggr
        self.hp = hp
    def attack(self):
        print(self.name)print(self.sex)obj1 = Person('alex','female',250,1)
obj2 = Person('egon','male',500,2)
print(obj1.name,obj1.sex,obj1.aggr,obj1.hp)
print(obj2.name,obj2.sex,obj2.aggr,obj2.hp)
print(obj1.__dict__)
print(obj2.__dict__)
print(obj1)
Person.attack(obj1)  # 调用一个类中的方法了
obj1.attack()
对象的具体:
    内存地址的不一致不同的对象 属性的值应该不同类名(参数)创造一个空对象 : self调用__init__方法 : 初始化方法把参数传给__init__方法完成init方法中的代码自动将self返回给实例化的地方self就是对象调用类中的方法 :
    类名.方法名(对象)对象名.方法名()

三:总结

#初始面向对象
'''
class Person:
    role = '人'   # 类的静态变量 是所有的对象共享的一个属性
    def __init__(self):
       pass
    def attack(self):
1.类:一类事务,如人,电脑等
 对象:一个具体的事务,如小明,小明的手机
2.定义一个类:class Person(): 类名 Person 首字母要大写 ()可写可不写
              在类中添加共用属性  role = '人'  类的静态变量 是所有的对象共享的一个属性
在调用时用 print(Person.role)
3.查看类中的名字:
3.1 print(Person.role) 类提供给我们的调用方式  可以进行修改 如Person.role = '中国人'
3.2 print(Person.__dict__) 类提供的存储方式 会将类中的所有名字和方法均显示出来
print(Person.__dict__['role'])
4.类只有两个作用:
4.1.使用类中的名字
    查看类中的名字:1. 类名.变量名 # 可以修改变量的值
                  2.类名.__dict__['变量名']   # 不能修改
4.2.创造对象  实例化对象
    对象就是实例,一个实际的例子
    对象 = 类名()  #obj1=person()
5.实例化:
1.obj1 = Person('alex','female',1,250)  # 实例化 先创造对象 再初始化
print(obj1.name,obj1.sex,obj1.aggr,obj1.hp)
print(obj2.name,obj2.sex,obj2.aggr,obj2.hp)
print(obj1.__dict__)
2.调用__init__方法 : 初始化方法
    def __init__(self,name,sex,aggr,hp):  #方法 动态属性  内置的双下方法 self就是对象
        self.name = name    self理解为等于一个空字典,self={} self.name中name为key值,等号右边的为value值
        self.sex = sex    name,sex等均为属性
        self.aggr = aggr
        self.hp = hp
6.对象的具体:
print(obj1) #object at 0x000001B8F1378A90>
print(obj2) #object at 0x000001B8F1378AC8>
    1.内存地址的不一致
    2.不同的对象 属性的值应该不同
7.类名(参数)
    1.创造一个空对象 : self(即obj1)
    2.调用__init__方法 : 初始化方法
    3.把参数传给__init__方法
    4.完成init方法中的代码
    5.自动将self返回给实例化的地方 self就是对象
8.调用类中的方法 :
 def attack(self):  # 自定义方法
        print(self.name)
1.类名.方法名(对象) Person.attack(obj1)
2.对象名.方法名() obj1.attack()  def attack(self):self就是obj1
9.使用面向对象的步骤:
1.完成类
首先分析一下角色和类 类里面有哪些属性 init方法
再分析这个类中能有哪些行为 定义为方法
2.实例化
传参数获取实例化之后的对象
    1.首先创造对象,
    2.执行init方法
3.对象的调用:使用对象调用对象属性和类中的方法
对象名的作用:
    1.使用变量 对象名.属性名 obj1.name
    2.调用方法 对象名.方法名() obj1.attack()
'''
####人狗大战
class Person:    # 类名 Person
    role = '人'  # 类的静态变量 是所有的对象共享的一个属性
    def __init__(self,name,sex,aggr,hp):  #方法 动态属性  内置的双下方法
        self.name = name    # 对象属性 实例属性
        self.sex = sex
        self.aggr = aggr
        self.hp = hp
    def attack(self,dog):  # 自定义方法
        print('%s打了%s'%(self.name,dog.name))dog.hp -= self.aggrclass Dog:
    def __init__(self,name,kind,aggr,hp):
        self.name = name   # 对象属性
        self.kind = kind
        self.aggr = aggr
        self.hp = hp
    def bite(self,person):
        print('%s咬了%s'%(self.name,person.name))person.hp -= self.aggr
hei = Dog('小黑','teddy',260,10000)  # 实例化: 先创造对象 再初始化
alex = Person('alex','female',1,250)  # 实例化
egon = Person('egon','male',2,500)  # 实例化
alex.attack(hei)   # Person.attack(alex,hei)
egon.attack(hei)   # Person.attack(alex,hei)
print(hei.hp)
hei.bite(alex)
print(alex.hp)
#
# ##根据半径求圆面积##
# from math import pi
# class Circle:
#     def __init__(self,r):
#         self.r=r
#     def area(self):
#        return self.r**2*pi
#     def  perimeter(self):
#        return self.r*2*pi
# circle=Circle(5)
# print(circle.area())
# print(circle. perimeter())
# ###小明,老王###
# '''
# 小明,男,10岁,上山去砍柴
# # 小明,男,10岁,开车去东北
# # 小明,男,10岁,最爱大保健
# # 老张,男,90岁,上山去砍柴
# # 老张,男,90岁,开车去东北
# # 老张,男,90岁,最爱大保健
# # 老王,男,70岁,上山去砍柴
# '''
# class Person:
#     def __init__(self,name,sex,aggr):
#         self.name=name
#         self.sex = sex
#         self.aggr = aggr
#     def attack(self):
#         print("%s%s%s上山去砍柴"%(self.name,self.sex,self.aggr ))
#         print("%s%s%s开车去东北" % (self.name, self.sex, self.aggr))
#         print("%s%s%s最爱大保健" % (self.name, self.sex, self.aggr))
# obj1=Person("小明","男",10)
# obj1.attack()
# obj2=Person("老王","男",90)
# obj2.attack()
# obj3=Person("老张","男",75)
# ###方法二###
# class Person:
#     def __init__(self,name,sex,age):
#         self.name = name
#         self.age = age
#         self.sex = sex
#     def dirve(self):
#         print('%s,%s,%s岁,开车去东北'%(self.name,self.sex,self.age))
#     def climb(self):
#         print('%s,%s,%s岁,上山去砍柴'%(self.name,self.sex,self.age))
#     def hobby(self):
#         print('%s,%s,%s岁,最爱大保健'%(self.name,self.sex,self.age))
# ming = Person('小明','男',10)
# ming.dirve()
# ming.climb()
# ming.hobby()
# zhang = Person('老张','男',90)
# zhang.dirve()
# zhang.climb()
# zhang.hobby()

转载于:https://my.oschina.net/u/3657436/blog/1630022

初识面向对象(理论1)相关推荐

  1. 16.1、python初识面向对象(1)

    初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人 ...

  2. Python初识面向对象

    一.Python初识面向对象 1.1 封装 class Person:country='中国' #静态字段,可以直接调用def __init__(self,name,pwd): #Python类自带的 ...

  3. 网工学Python——初识面向对象

    阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...

  4. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  5. learn_Day14 内置函数补充、反射、初识面向对象

    内置函数 __import__()用于导入模块 getattr 用于寻找模块的指定对象 a = __import__('b')  # b为模块名,b是字符串 ==>> 导入模块b并重新命名 ...

  6. 第一小节 初识面向对象

    阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...

  7. JavaScript基础——第四章,JavaScript对象及初识面向对象

    文章目录 JavaScript对象及初识面向对象 1.对象 1.1 对象的概念 1.2 内置对象 1.3 自定义对象 1.3.1 操作符new创建对象 1.3.2 使用字面量赋值的方式定义对象 2.构 ...

  8. 第十章 初识面向对象

    第十章 初识面向对象 1.面向对象思想的引入 例:公司需要开发一款人狗大战的游戏 需要两个角色:人 狗 人的属性:昵称.性别.生命值.战斗力.背包 狗的属性:昵称.品种.生命值.战斗力 再尚未学习面向 ...

  9. python人狗大战游戏_day22 01 初识面向对象----简单的人狗大战小游戏

    day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战   怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...

  10. day22~day23初识面向对象

    python之路--初识面向对象 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同 ...

最新文章

  1. ***检测与防护(IDS/IPS)
  2. Mac OSX 10.9下apache+php+mysql的配置
  3. [转]MySQL 5.6 my.cnf配置优化
  4. 7-17 BCD解密(10 分)
  5. CMake编译opencv
  6. 【NOIP2016提高A组五校联考2】running
  7. 协同进化遗传算法 代码_遗传算法在组卷中的应用
  8. 两种简单高效的“反人脸识别”方法
  9. Learn OpenGL(一)图形渲染管线(Pipeline)
  10. 谷歌强烈推荐!浏览器助手,让你的浏览器至少提升10个档次!
  11. 冰点文库下载器V3.1.4
  12. python 中文分析句子成分_中文句子结构分析
  13. 中兴新支点操作系统_中兴新支点操作系统的设计和功能怎样?
  14. pipe()函数详解
  15. 彪悍的人生不需要解释!
  16. 虐心的《西部世界》第二季:我看哭了 人类和AI傻傻分不清
  17. ikbc键盘win键失灵原因
  18. 专升本英语——应试题型突破——翻译——名言警句【学习笔记】
  19. 熊大微评微内核|华为“鸿蒙”所涉及的微内核究竟是什么?
  20. 20110822炒股日记--进入筑底阶段

热门文章

  1. c语言各种变量的优缺点,C语言优缺点
  2. mvcc原理_MVCC原理探究及MySQL源码实现分析
  3. 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)...
  4. css3中的 @Keyframes
  5. MySQL必知必会(使用子查询)
  6. js jQuery取消添加超链接的方法小结
  7. 3、PV、UIP、UV指的是什么
  8. 面向对象上机题-迭归算法
  9. mysql数据库迁移到另一台电脑上
  10. C#中修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限