面向对象(基础)

# 定义一个类
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 
原文地址:https://www.cnblogs.com/tengx/p/11854173.html