Python基础,类的继承,类的多态继承等

本文深入探讨Python中的类与对象概念,包括实例变量、类变量、构造方法、成员方法、私有变量及方法的封装,同时讲解类方法、静态方法、类的继承与多态,通过实例演示如何创建类与对象,进行枪战模拟游戏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# day 4 
# 类中成员变量描述对象的属性值根据对象不同,会产生区别,称此类变量为实例变量
# 类中成员变量描述对象的属性值根据对象不同,会产生区别,称此类变量为类变量

#
# class QieZi:
#     sub = "people"
#
#     def __init__(self):
#         """构造方法,可以自定义参数,类似于c++的构造函数"""
#         self.type = "茄子少将"  # 共有属性,类似public
#         # 实例变量
#         self.name = None  # 不给值
#         self.__dnmd = None  # 私有变量的定义格式
#
#     # 成员方法
#     def get_dnmd(self):
#         """私有变量的封装 :访问器"""
#         return __dnmd
#
#     def set_dnmd(self, member):
#         """私有变量的封装 :修改器"""
#         self.__dnmd = member
#
#     def speak(self):
#         print("wdnmd!")
#
#     def talk(self, i):
#         j = 0
#         while j < i:
#             print("我叼你妈的!")
#             j += 1
#
#     def introduce(self):
#         """ 想要在方法中调用类型的公共变量得加一个self"""
#         print("我是%s,我叫%s,我喜欢说”%s“" % (self.type, self.name, self.words))
#
#     def __WDNMD(self):
#         """私有方法的定义"""
#         return " "
#
#     def __str__(self):  # 魔术方法,在打印输出对象到屏幕时运行
#         return "叼你妈的,还想看老子内存"


"""

类方法
定义格式:
class 类名:
    @classmethod
        def 方法名(cls,形参):
            方法体


调用格式:
类名.方法名(实参)
对象名.方法名(实参)

NOTE:
      实例方法可以调用类方法(变量)
      类方法不可以调用实例方法(变量)
    小结:类很高贵,实例不配
        实例是类的舔狗
"""

#
# #############
"""
静态方法
定义格式:
class 类名:
    @staticmethod
        def 方法名(形参):
            方法体 

和类没啥关系,和普通函数没区别
"""

# 类的继承
"""
定义格式:
class 类名(父类)
    pass
    
    
NOTE:
    子类不能调用父类的私有成员
    子类可以添加父类没有的成员
"""
#  类的多态继承
"""
 定义格式:
 class 类名(父类1,父类2,....)
     pass、
父类在前面先被调用
多继承重写
调用格式:
        1.父类名.方法名(对象)
        2.spuer(本类名,对象).方法名
        3.supper().方法名()
        
"""

# 例如

# class Animal:
#     """父类:动物类"""
#
#     def __init__(self):
#         self.name = None
#         self.age = None
#         self.__we = None  # 私有变量,子类无法继承
#
#     def Speak(self):
#         """
# 用来说话
#         """
#         print("我叼你妈的")
#
#     pass
#
#
# class Cat(Animal):
#     """子类:猫类"""
#     def Speak(self):
#         """重写"""
#         print("我柜子动了")
#         """
#         在子类中调用父类中被重写的实例方法
#         调用格式:
#         1.父类名.方法名(对象)
#         2.spuer(本类名,对象).方法名
#         3.supper().方法名()
#         """
#         Animal.Speak(self)
#         super(Cat, self).Speak()
#         super().Speak()
#
#     pass
#
#
# cat = Cat()
# cat.name = "是我,你蝶"
# cat.age = 333
# # TODO 用于查看继承层次关系,object是所有类的父类
# print(Cat.__mro__)
# """
# 在子类中可以定义与父类相同名称的方法,此时子类的方法对父类的方法构成了重写
# """
# cat.Speak()


"""
案例:”反恐精英“程序
要求:
    三个恐怖分子与反恐精英枪战
    没人设定100生命值,生命值为0视为死亡
    一方全部死亡枪战结束
    
    
以对象体现:
两个类
抽取人 类:有100血
枪战做成方法
"""


""" 
信息显示模式:
"""
# 随机数
# random
"""
1.先导入包 import random
2.random.randint(1,3)
"""

import random

class Person:
    def __init__(self, name):
        self.name = name
        self.life = 100

    def __str__(self):
        """用于显示状态"""
        return "%s当前的生命值为:%s" % (self.name, self.life)


class Hero(Person):
    def fire(self, p):
        damage = 40
        # 加入命中率
        hit = random.randint(1, 100)
        if hit >= 20:
            print("%s向%s开枪,造成了 %d伤害" % (self.name, p.name, damage))
            p.life = p.life - damage
            if p.life <= 0:
                p.life = 0
        else:
            print("wdnmd,没打中" )

    def __str__(self):
        """用于显示状态"""
        state = ""
        if self.life == 100:
            state = "无伤"
        elif self.life >= 70 and self.life < 100:
            state = "轻伤"
        elif 1 <= self.life < 100:
            state = "重伤"
        elif self.life == 0:
            state = "没了"
        return "%s当前的状态为:%s" % (self.name, state)


class IS(Person):
    def fire(self, p):
        damage = 5
        hit = random.randint(1, 100)
        if hit >= 40:
            print("%s向%s开枪,造成了 %d伤害" % (self.name, p.name, damage))
            p.life = p.life - damage
            if p.life <= 0:
                p.life = 0
        else:
            print("%s:芽儿哟,没打中" %self.name)



def main():
    h = Hero("茂名磨刀石")
    is1 = IS("磨刀人")
    is2 = IS("pdd")
    is3 = IS("lbw")

    while True:
        #产生随机数
        x = random.randint(1, 3)
        if x == 1:
            h.fire(is1)
        elif x == 2:
            h.fire(is2)
        elif x == 3:
            h.fire(is3)
        is1.fire(h)
        is2.fire(h)
        is3.fire(h)
        print(h)
        print(is1)
        print(is2)
        print(is3)
        print()
        #设置结束条件
        if h.life <= 0:
            print("%s死亡,枪战结束" %h.name)
            break
        if is1.life <= 0 and is2.life <= 0 and is3.life <= 0:
            print("%s死亡,枪战结束" % is1.name)
            break


main()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值