zoukankan      html  css  js  c++  java
  • python之路_面向对象命名空间及组合

    一、面向对象命名空间

    例1:对象对对象属性的创建

    class A:
        country = '印度'
        def show_name(self):
            print(self.name)
    
    a = A()                                        #实例化对象
    a.name = 'alex'                                #给对象创建一个name属性
    a.show_name()                                  #调用了showname方法,输出结果为:alex
    class A:
        country = '印度'
        def show_name(self):
            print(self.name)
    
    a = A()
    a.name = 'alex'
    a.show_name()                                  #输出结果:alex
    a.show_name = 'egon'                           #相当于创建了一个show_name属性
    a.show_name()                                  #报错:TypeError: 'str' object is not callable

    例2:类的静态属性的调用

    class A:
        country = '印度'
        def show_name(self):
            print(self.name)
    
    a = A()                                       #a对象
    b = A()                                       #b对象
    print(A.country)                              #输出结果为:印度
    print(a.country)                              #先找a对象的内存 再找A的内存,结果为:印度
    print(b.country)                              #结果为:印度
    a.country = '中国'                             #给a对象创建了一个属性
    print(A.country)                               #印度
    print(a.country)                               #中国
    print(b.country)                               #印度

    二、面向对象组合

      在一个类中以另一个类的对象做为数据属性,称为类的组合

    例1:计算圆环的面积和周长

    from math import pi
    class Circle:
        def __init__(self,r):
            self.r=r
        def area(self):
            return pi*self.r**2
        def round(self):
            return 2*pi*self.r
    class Ring:
        def __init__(self,R,r):
            self.c_out=Circle(R)
            self.c_in=Circle(r)
        def area(self):
            return self.c_out.area()-self.c_in.area()
        def round(self):
            return self.c_out.round()+self.c_in.round()
    ring=Ring(10,5)
    print(ring.area())
    print(ring.round())

    例2:人具有生日、课程属性

    class Birthday:
        def __init__(self,year,month,day):
            self.year=year
            self.month=month
            self.day=day
    class Course:
        def __init__(self,name,price,teacher):
            self.name=name
            self.price=price
            self.teacher=teacher
    class Person:
        def __init__(self,name,birth,course):
            self.name=name
            self.birth=birth
            self.course=course
    B=Birthday(1999,12,24)
    C=Course('python',20000,'jing')
    haijiao=Person('haijiao',B,C)
    print(haijiao.name)                                  #haijiao
    print(haijiao.birth.year)                            #1999
    print(haijiao.birth.month)                           #12
    print(haijiao.birth.day)                             #24
    print(haijiao.course.name)                           #python
    print(haijiao.course.price)                          #20000
    print(haijiao.course.teacher)                        #jing

    例3:人狗大战续

    class Person:
        def __init__(self,name,sex,aggr,blood):
            self.name = name
            self.sex = sex
            self.aggr = aggr
            self.blood = blood
            self.money = 0
    
        def attack(self,dog):
            dog.blood -= self.aggr
    
        def equip(self,weapon):
            self.money -= weapon.price
            self.weapon = weapon
    
        def use_weapon(self,dog):
            self.weapon.hurt(dog)
            self.blood += self.weapon.back_blood
    
    class Dog:
        def __init__(self,name,kind,aggr,blood):
            self.name = name
            self.kind = kind
            self.aggr = aggr
            self.blood = blood
    
        def bite(self,person):
            person.blood -= self.aggr
    
    class Weapon:
        def __init__(self,name,attack,price,back_blood):
            self.name = name
            self.attack = attack
            self.price = price
            self.back_blood = back_blood
    
        def hurt(self,dog):
            dog.blood -= self.attack
    
    egon = Person('egon','不详',250,380)
    alex = Person('alex','不详',20,40000)
    dog = Dog('egg','藏獒',500,20000)
    毒包子 = Weapon('毒包子',10000,200,300)
    egon.money = 200
    if egon.money >= 毒包子.price:
        egon.equip(毒包子)
    egon.use_weapon(dog)
    print(egon.blood)
    print(dog.blood)
  • 相关阅读:
    2016中国大学生程序设计竞赛
    HDU 1671 Phone List (Trie·数组实现)
    Codeforces Round #367 (Div. 2) Hard problem
    UVA 133 The Dole Queue
    SG函数模板
    Codeforces Round #366 (Div. 2) C Thor(模拟+2种stl)
    [Offer收割]编程练习赛4 A 满减优惠
    CF #365 (Div. 2) D
    Codeforces Round #365 (Div. 2) Chris and Road
    codeblocks AStyle修改格式和快捷键
  • 原文地址:https://www.cnblogs.com/seven-007/p/7527394.html
Copyright © 2011-2022 走看看