zoukankan      html  css  js  c++  java
  • 面向对象(基础)

    # 定义一个类
    class Person:
        mind = '思想'  # 静态变量,静态字段
        animal = '高级动物'
        def __init__(self,name,age): # 构造方法
            self.name = name
            self.age = age
    
        def work(self): #方法 动态变量
            print('都会工作')
    
    
    # 1, 查询类中的全部内容
    print(Person.__dict__)
    
    # 可以使用del来删除类中的比字段
    del Person.mind
    
    # 实例化对象
    
    obj1 = Person('TOM',15)
    # 实例化的对象可以调用类或父类中的方法以及字段
    print(obj1.animal)
    obj1.work()
    
    
    # 比如我们有一个需求
    # (1)
    # 创建一个
    # Game_role的类.
    # (2)
    # 构造方法中给对象封装name, ad(攻击力), hp(血量).三个属性.
    # (3)
    # 创建一个attack方法, 此方法是实例化两个对象, 互相攻击的功能:
    # 例: 实例化一个对象
    # 盖伦, ad为10, hp为100
    # 实例化另个一个对象
    # 剑豪
    # ad为20, hp为80
    # 盖伦通过attack方法攻击剑豪, 此方法要完成
    # '谁攻击谁,谁掉了多少血,  还剩多少血'
    # 的提示功能.
    
    
    class Game_role:
        def __init__(self,name,ad,hp):
            self.name = name
            self.ad = ad
            self.hp = hp
    
        def attack(self,target):
            target.hp = target.hp - self.ad
            print('{0}攻击了{1},{1}掉了{2}血,还剩{3}血'.format(self.name,target.name,self.ad,target.hp,))
    
    
    gailun = Game_role('盖伦',10,100)
    jianhao = Game_role('剑豪',20,80)
    
    gailun.attack(jianhao)
    
    # python在实例化的过程中,首先在内存中开辟空间,将空间也就是self传给构造函数,而实例对象则指向这一块空间
    # 实例化对象在执行方法时会将这处空间默认传给方法
    # (1)
    # 创建一个
    # Game_role的类.
    # (2)
    # 构造方法中给对象封装name, ad(攻击力), hp(血量).三个属性.
    # (3)
    # 创建一个attack方法, 此方法是实例化两个对象, 互相攻击的功能:
    # 例: 实例化一个对象
    # 盖伦, ad为10, hp为100
    # 实例化另个一个对象
    # 剑豪
    # ad为20, hp为80
    # 盖伦通过attack方法攻击剑豪, 此方法要完成
    # '谁攻击谁,谁掉了多少血,  还剩多少血'
    # 的提示功能.
    # 我们想给人物添加武器
    # 例:盖伦使用大宝剑攻击了剑豪......
    # 那么就需要一个武器类,一个人物类
    class Game_role:
        def __init__(self,name,ad,hp):
            self.name = name
            self.ad = ad
            self.hp = hp
        # 添加一个装备武器的方法
        def armament(self,wea):
            # 将一个实例赋值给另一个实例属性的过程又叫做组合
            self.wea = wea
    
    class Weapon:
        def __init__(self,name,ad):
            self.name = name
            self.ad = ad
    
        def fight(self,o1,o2):
            o2.hp = o2.hp - self.ad - o1.ad
            print('{0}使用{2}攻击了{1},{1}掉了{3}血还剩{4}血'.format(o1.name,o2.name,self.name,self.ad + o1.ad,o2.hp))
    
    
    # 实例化一把武器
    sword = Weapon('宝剑',20)
    # 创建两个英雄
    gl = Game_role('盖伦',10,100)
    jh = Game_role('剑豪',20,80)
    
    gl.armament(sword)
    
    gl.wea.fight(gl,jh)
    
    # result:盖伦使用宝剑攻击了剑豪,剑豪掉了30血还剩50血
    # 例:定义一个类计算圆环面积和周长
    
    # 首先我们先定义一个类计算单个圆的面积和周长
    from math import pi
    
    class Circle:
        def __init__(self,r):
            self.r = r
    
        def area(self):
            return round(self.r ** 2 *pi , 2)
    
        def perimeter(self):
            return round(self.r * 2 * pi , 2)
    
    
    class Ring:
        def __init__(self,r1,r2):
            # 这里同样使用了组合的思想
            self.r1 = Circle(r1)
            self.r2 = Circle(r2)
    
        def area(self):
            return round(self.r1.area() - self.r2.area())
    
        def perimeter(self):
            return round(self.r1.perimeter() + self.r2.perimeter())
    
    
    y1 = Ring(5,4)
    
    print(y1.area())
    
    # result:28 
  • 相关阅读:
    Vue中v-on的指令以及一些其他指令
    Vue模板语法中数据绑定
    Vue介绍以及模板语法-插值
    JQ中的Ajax的封装
    跨域问题的解决?
    Ajax的快速入门
    如何使用npm的部分用法以及npm被墙的解决方法
    使用Node.js简单创建一个服务器
    机智云连接ESP8266--远程控制点亮RGB灯
    1、索引的概念和分类
  • 原文地址:https://www.cnblogs.com/tengx/p/11854173.html
Copyright © 2011-2022 走看看