• 复习整理3


    类:具有相同属性和技能的一类事物
    对象:具体的类的表现(类的实例)
    # # 面向对象结合函数
    # # 类:具有相同属性和技能的一类事物
    # # 对象:具体的类的表现(类的实例)
    #
    # # class  定义类的关键字
    #
    # class Person:  # 第一个字母大写  # 类里面一般两部分:变量部分,方法(函数)部分
    #     """注释"""
    #     mind = "思想"
    #     animal = "动物"
    #     faith = "信仰"  # 变量也可以称为静态变量或者静态字段
    #
    #     def __init__(self):
    #         print(self)
    #         print(666)
    #         # self.name = name
    #         # self.age = age
    #         # self.sex = sex
    #
    #     def work(self):
    #         print("都得工作")
    #
    #     def sleep(self):  # 方法(函数)
    #         print("休息")
    #
    #
    # # 类名的角度
    # # 类名中的静态变量
    # # #1  __dict__
    # # print(Person.__dict__)  # 以字典形式返回类中所有内容
    # # print(Person.__dict__["mind"])  # 只能查询,不能进行增删改
    #
    # # # 2  利用点 .
    # # print(Person.mind)  # 查
    # # Person.money = "RMB"  # 增加
    # # print(Person.__dict__)
    # # Person.animal = "猴子" # 改
    # # print(Person.__dict__["animal"])
    # # del Person.mind  # 删
    #
    # #     # 操作类中的方法
    # # print(Person.__dict__)
    # # Person.__dict__["work"](1)  # 工作中不用
    # # Person.work(2)   # 基本不用
    #
    # # 对象的角度
    # # Person() 类名加()叫做实例化的过程
    # # 只要类名()产生一个对象,自动执行__init__方法
    # p = Person()    # 类名()产生了一个对象内存地址,然后实例化将内存地址传递给__init__函数里面第一个位置参数,也就是self,执行__init__
    # print(p)
    
    
    class Person:  # 第一个字母大写  # 类里面一般两部分:变量部分,方法(函数)部分
        """注释"""
        mind = "思想"
        animal = "动物"
        faith = "信仰"  # 变量也可以称为静态变量或者静态字段
    
        def __init__(self, name, age, sex):
            print(666)
            self.name = name
            self.age = age
            self.sex = sex
    
        def work(self):
            print("都得工作")
    
        def sleep(self):  # 方法(函数)
            print("休息")
    
    p = Person("ly", "99", "m") # 这里的p和self 的地址是相同的,也可以看作是对象内存空间。
    
    # 1 类名+()  产生一个实例(对象,对象空间)
    #2 自动执行类中的__init__方法,将对象空间传递给__init__的self参数
    # 给对象封装相应的属性
    print(p.__dict__)
    
    # 对象操做类中的静态变量只能查询
    print(p.animal)
    # 对象调用类中的方法
    p.sleep()

    作业

    # class Persom:
    #     animal = "动物"
    #     soul = "有趣的灵魂"
    #     language = "语言"
    #
    #     def __init__(self,country,name,age,sex,height):
    #         self.country = country
    #         self.name = name
    #         self.age = age
    #         self.sex = sex
    #         self.height = height
    #
    #     def eat(self):
    #         print("%s吃饭了" % self.name)
    #
    #     def sleep(self):
    #         print("睡觉")
    #
    #     def work(self):
    #         print("工作")
    #
    #
    # p1 = Persom("中国", "y", 6, "男", 178)
    # p2 = Persom("美国", "武大", 7, "男", 174)
    # p3 = Persom("中国", "小", 8, "男", 17)
    # p4 = Persom(p1.country, p2.name, p3.age, p3.sex, p3.height)
    # print(p4.__dict__)
    #
    # p1.eat()
    
    class Person:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def dbj(self):
            print("%s 最爱大保健" % self.name)
    
        def kc(self):
            print("%s 上山去砍柴" % self.name)
    
        def db(self):
            print("%s 去东北" % self.name)
    
    p1 = Person("小明", 2 ,"")
    p1.kc()

    类名称空间,查询

    class Perso:
        animal = "动物"
        soul = "有趣的灵魂"
        language = "语言"
    
        def __init__(self,country,name,age,sex,height):
            self.country = country
            self.name = name
            self.age = age
            self.sex = sex
            self.height = height  # 构造方法,封装属性,自动执行
    
        def eat(self):
            print("%s吃饭了" % self.name)
    
        def sleep(self):
            print("睡觉")
    
        def work(self):
            print("工作")
    
    
    p1 = Perso("中国", "y", 6, "", 178)
    # p2 = Persomn("美国", "武大", 7, "男", 174)
    print(p1.animal)
    
    # class Persom 时,自动创建内存空间,再把静态变量animal = "动物 soul = "有趣的灵魂" language = "语言"写入内存空间,
    # 再把各个函数的名称和地址写入空间
    # 读到类名+()产生一个(含有类对象指针)实例空间,执行__init__,将空间地址传给self,并向__init__里面传值
    # 比如一个实例,通过实例我们可以访问对象封装的属性,也可以访问静态变量,先访问实例内存空间是否含有该变量,如果没有则再通过类对象指针访问该变量
    # 查询顺序:对象.属性:对象空间 >  类空间 > 父类空间>......
    #          类名.属性 > 类空间> 父类空间>.....
    
    
    
    # 计算一个类实例化多少对象
    
    class Count:
        count = 0
        def __init__(self):
            Count.count += 1
            # Count.count = self.count + 1  # 第一次实例化,self.count 在类空间z中找到Count.count为0,执行一次后Count.count 变为1
            # 通过 对象变量   不能改变    类变量
    
    obj1 = Count()
    obj1 = Count()
    obj1 = Count()
    obj1 = Count()
    obj1 = Count()  # 只要类名()就表示实例化一次,所以会执行__init__
    print(obj1.count)
    
    
    # count = 0
    # def func():
    #     count += 1
    #     print(count)
    #
    # func()    # UnboundLocalError: local variable 'count' referenced before assignment 局部变量不能修改

    练习

    class Game_role:
        def __init__(self, name, ad, hp):
            self.name = name
            self.ad = ad
            self.hp = hp
    
        def attack(self,p):
            print("%s攻击%s,%s掉了%s的血,还剩%s血" %(self.name, p.name, p.name, self.ad, p.hp-self.ad))
            p.hp -= self.ad
    
    jh = Game_role("剑豪", 50, 200)
    gl = Game_role("盖伦", 20, 500)
    gl.attack(jh)
    print(jh.hp)

    组合

    # # 给一个类的对象封装一个属性,这个属性是另一个类的对象
    #
    # # 版本一:添加武器,但是代码不合理,淘汰
    # class Game_role:
    #     def __init__(self, name, ad, hp):
    #         self.name = name
    #         self.ad = ad
    #         self.hp = hp
    #
    #     def attack(self, p):
    #         print("%s攻击%s,%s掉了%s的血,还剩%s血" % (self.name, p.name, p.name, self.ad, p.hp - self.ad))
    #         p.hp -= self.ad
    #
    #
    # class Weapon:
    #     def __init__(self, name, ad):
    #         self.name = name
    #         self.ad = ad
    #
    #     def fight(self, p1, p2):
    #         p2.hp -= self.ad
    #         print("%s用%s打了%s,%s掉了%s的血,还剩%s血"
    #               % (p1.name, self.name, p2.name, p2.name, self.ad, p2.hp))
    #
    #
    # # axe = Weapon("斧头", 15)
    # # Broadsword = Weapon("大长刀", 99)
    #
    #
    # jh = Game_role("剑豪", 50, 200)
    # gl = Game_role("盖伦", 20, 500)
    # # axe.fight(jh, gl)
    # # Broadsword.fight(gl, jh)
    # # gl.attack(jh)
    # # print(jh.hp)
    
    
    class Game_role:
        def __init__(self, name, ad, hp):
            self.name = name
            self.ad = ad
            self.hp = hp
    
        def attack(self, p):
            print("%s攻击%s,%s掉了%s的血,还剩%s血" % (self.name, p.name, p.name, self.ad, p.hp - self.ad))
            p.hp -= self.ad
    
        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 -= self.ad
            print("%s用%s打了%s,%s掉了%s的血,还剩%s血"
                  % (p1.name, self.name, p2.name, p2.name, self.ad, p2.hp))
    
    jh = Game_role("剑豪", 50, 200)
    gl = Game_role("盖伦", 20, 500)
    axe = Weapon("斧头", 15)
    Broadsword = Weapon("大长刀", 99)
    jh.armament_weapon(axe)  # 给jh装备武器axe
    jh.wea.fight(jh,gl)
  • 相关阅读:
    select top 变量问题
    distinct top執行順序
    Subquery typo with using in(转)
    sql:查询课程号'0312091006'成绩排名第5到第10之间的学生学号
    case when then
    触发器
    索引
    管理事物处理
    053345
    053344
  • 原文地址:https://www.cnblogs.com/yfjly/p/10582788.html
Copyright © 2020-2023  润新知