zoukankan      html  css  js  c++  java
  • 17 类的名称空间 查询顺序 组合

    主要内容:

    1.   类的名称空间查询顺序

      查询空间:

          对象的查询空间:先从对象空间找,如果找不到,再从类空间找,再找不到,从父类空间找.....

          类的查询空间:   先从本类的空间找,如果找不到,再从父类空间找......

    class Person:
        animal = '高级动物'
        def __init__(self, country, name, sex):
            self.country = country
            self.name = name
            self.sex = sex
        def eat(self):
            print('%s吃饭' % self.name)
        def work(self):
            print('工作')
    Person.__dict__['work'](11)    #可以通过函数对应的地址+()调用改函数.
    p1 = Person('china','alex','nan')
    print(p1.__dict__)
    print(p1.animal)           #对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找....
    print(Person.animal)       #类名:属性:  先从本类空间找,如果找不到,再从父类找....
    # 对象与对象之间是互相独立的.
    p1.animal = '低级'        #不能改变类中的变量,只能查询,试图改变,只能往对象里添加属性.
    print(p1.__dict__)        #{'country': 'china', 'name': 'alex', 'sex': 'nan', 'age': '23', 'hight': 175, 'animal': '低级'}
    print(Person.__dict__)    #{'__module__': '__main__', 'animal': '高级动物',
    

    2.  计算一个类中,实例化多少次对象 

    class Count:
        count = 0
        def __init__(self):
            Count.count = Count.count + 1
    p1 = Count()
    p1 = Count()
    p1 = Count()
    print(Count.count)
    
    # 通过类名.变量,可以改变变量的值
    Count.count = 6
    print(Count.count)
    # 通过对象,不能改变,只能引用
    

    3.  组合

      组合的定义:给一个类中的对象封装属性,该属性是另一个类中的对象 

    #滕攀用三板斧打了候,候掉了多少血,还剩多少血.
    class Game_role:
        def __init__(self,name,ad,hp):
            self.name = name
            self.ad = ad
            self.hp = hp
        def attack(self):
            pass
        def armament_weapon(self,wea):
            self.wea = wea
    class Weapon:
        def __init__(self,name,ad):
            self.name = name
            self.ad = ad
        def fight(self,p1,p2):
            p2.hp = p2.hp - self.ad
            print('%s用%s打了%s,%s掉了%s血,还剩%s血' % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
    p1 = Game_role('滕攀',20,200)
    p2 = Game_role('候',10,50)
    aa = Weapon('三板斧',88)
    tt = Weapon('宝刀',666)
    # aa.fight(p1,p2)    #代码不合理,人物是利用武器攻击别人呢,你的动作发起者是人,而不是武器.
    # print(p2.hp)
    p1.armament_weapon(aa)   #给滕攀装了三板斧这个对象.
    p1.wea.fight(p1,p2)
    

     4.  求一个圆环的周长和面积

        一个圆的周长和面积:

    from math import pi
    class Circle:
    
        def __init__(self,r):
            self.r = r
    
        def area(self):
            return round(self.r ** 2 * pi
    
        def perimeter(self):
            return round(self.r * 2 * pi,2)         #余几位小数,可以用round()内置函数,余几位round后面取具体的数字.
    

      利用组合的思想,求一个圆环的周长和面积.

    # # 组合的思想
    class Ring:
    
        def __init__(self,r1,r2):
            self.r1 = Circle(r1)
            self.r2 = Circle(r2)
    
        def area(self):
            return self.r1.area() - self.r2.area()
    
        def perimeter(self):
            return round(self.r1.perimeter() + self.r2.perimeter(),2)
    r = Ring(6,3)
    print(r.area())
    print(r.perimeter())
    

      

     

     

     

  • 相关阅读:
    python 数据结构 图解递归 海龟画图分形树
    python 数据结构 理解迭代与递归 递归的实例 栈帧 函数调用
    python 数据结构 双端队列的两种实现方式 list 和 DoublelinkedList 回文词验证
    python 数据结构 实现队列的几种方法
    python 数据结构 实现链队的两种方法
    python 数据结构 查找数组最值
    python 数据结构 队列的实例 回文词与双端队列
    双向链表练习题
    均分纸牌问题
    L1-8 估值一亿的AI核心代码
  • 原文地址:https://www.cnblogs.com/gyh412724/p/9360697.html
Copyright © 2011-2022 走看看