zoukankan      html  css  js  c++  java
  • python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)

    一、类

    先看一段代码:

    class Person:
        animal = '高级动物'
        walk_way = '直立行走'    # 静态属性,静态变量,静态字段
        language = '语言'
        def __init__(self,name,age,work):  #  函数 动态属性,方法
            # print(self)
            self.name = name
            self.age = age
            self.work = work
        def eat(self):
            print('吃吃')
        def work(self):
            print('工作')
    obj = Person('alex',25,'it') 

    class:  类   Person:类名

    类:具有相同属性或者功能的一类实物

    对象:对象是类的具体体现。

    # 结构上理解:面向对象分两个部分,静态属性  动态属性 (属性、方法)

    特点:

    (1)函数封装一个功能,而面向对象封装多个相关的功能

    (2)面向对象是抽象的,它是一种思想,站在上帝的角度去理解他

    (3)程序可扩展,对象都是一个个独立的。耦合性,差异性。

    类名:

         (1)查看类中的所有属性及方法:__dict__

    print(Person.__dict__)

    print(Person.__dict__['animal'])    # 单独查看某个属性  

    # 工作中,一般只会用__dict__查看类中的所有属性,不进行其他操作

      (2)查看(增删改)类中某个,某些属性,用万能的点'.'

    # print(Person.animal)  # 查
    # Person.name = 'alex' # 增 改
    # print(Person.name)
    # del Person.walk_way # 删
    # print(Person.__dict__)
    (3) 函数的操作方法。一般不通过类名来操作
    Person.work(666) # 可以操作函数
    二、对象
    先看代码:
    class Person:
        animal = '高级动物'
        walk_way = '直立行走'
        language = '语言'
        def __init__(self,name,age,work):
            # print(self)
            self.name = name
            self.age = age
            self.work = work
        def eat(self):
            print('吃吃')
        def work(self):
            print('工作')
    obj = Person('alex',25,'it')   # 这是一个实例化过程,实例化一个内存空间(即对象空间)
    # print(obj)
    # print(obj.age)
    # print(obj.work)
    # print(obj.name)
    obj.hobby = 'tesla'
    print(obj.__dict__)
    obj.name = 'Chris'
    print(obj.__dict__)
    del obj.work
    print(obj.__dict__)
    obj.animal = '低等动物'
    print(obj.__dict__)         # 给对象添加了animal的属性
    print(Person.__dict__)
    
    print(obj.animal)
    print(Person.animal)
    # print(obj)
    obj.eat()

    # 对象

        # 对象操作对象空间

          #查看所有属性__dict__

    # print(obj.__dict__)    # 

                          # 对对象的某个属性  增删改查  万能的点

    obj.hobby = 'tesla'  # 增
    obj.name = 'Chris'  # 改
    del obj.work      # 删
    print(obj.name)    # 查

    类执行的过程图

     三、组合

    先看代码:

    class Gamerole:
        def __init__(self,nickname,ad,hp):
            self.nickname = nickname
            self.ad = ad
            self.hp = hp
        def equip_weapon(self, w):  # 给人物封装了一个武器属性,这个属性值是Weapon的一个对象
            self.equip_weapon = w   # 组合
    class Weapon:
        def __init__(self,name,ad):
            self.name = name
            self.ad = ad
        def fight(self,role1,role2):       # 此时的self为武器的内存地址
            role2.hp = role2.hp - self.ad - role1.ad     # 此时 role1、role2分别为p1、p2
            print('%s 用 %s 攻击了%s, %s掉了%s血,还剩%s血'
                  %(role1.nickname,self.name,role2.nickname,role2.nickname,self.ad + role.ad,role2.hp))
    
    p1 = Gamerole('盖伦',20,500)
    p2 = Gamerole('剑豪',100,200)
    w1 = Weapon('大宝剑',30)
    w2 = Weapon('武士刀',80)
    p2.equip_weapon(w2)
    p2.equip_weapon.fight(p2,p1)

    结果为:
    剑豪 用 武士刀 攻击了盖伦, 盖伦掉了180血,还剩320血

    插入解释图片:

    
    
  • 相关阅读:
    几个常见移动平台浏览器的User-Agent
    正则表达式那些事儿(三)
    正则表达式那些事儿(二)
    正则表达式那些事儿(一)
    jQuery官网plugins栏目下那些不错的插件
    UVA 11729 Commando War 突击战 【贪心】
    HDOJ 2084 数塔 【dp】
    HDOJ 1465 不容易系列之一 【错排公式 递推】
    HDOJ 2046 骨牌铺方格 【递推】
    HDOJ 2044 一只小蜜蜂... 【递推】
  • 原文地址:https://www.cnblogs.com/youhongliang/p/9526766.html
Copyright © 2011-2022 走看看