zoukankan      html  css  js  c++  java
  • day18 类与类之间的关系

    今日所学内容:

    1.类与类之间的关系 

    2.self 到底是谁?

    3. 特殊成员 :

    1.类与类之间的关系 

     在我们的世界中事物和事物之前总会有一些联系

    在面向对象中,类与类之间也可以产生相关的联系

    1) 依赖关系(类比于玩游戏,玩游戏必须依赖另一个东西,需要手机) 但是这种关系是很弱的,不是唯一的,我可以借助于手机,也可以借助于电脑,psp游戏机,依赖关系是类与类关系最弱的一种关系

    依赖关系实际是一个对象依赖于另一个对象 ,是关系最弱的

    # 写一个植物大战僵尸
    # 1. 植物
    #       打僵尸. 僵尸掉血
    # 2. 僵尸
    #       吃植物. 植物掉血
    class Plant: #创建植物类
        def __init__(self,name,hp,ad):
            self.name=name
            self.hp=hp
            self.ad=ad
        def gongji(self,js):  #定义植物攻击的方法
            js.hp-=self.ad # 计算植物攻击一次僵尸剩余的血量
            print(f'{self.name}攻击了僵尸{self.ad}的血量,僵尸剩余{js.hp}的血量')
    class jiangshi:  # 创建僵尸类
        def __init__(self,name,hp,ad):
            self.name=name
            self.hp=hp
            self.ad=ad 
        def gongji(self,zw): #定义僵尸攻击方法
            zw.hp=self.ad  # 计算僵尸攻击一次植物剩余的血量
            print(f'{self.name}攻击了植物{self.ad}的血量,植物剩余{zw.hp}的血量')
    wd=Plant('豌豆射手',10,3)
    tt=jiangshi('铁桶僵尸',30,3)
    wd.gongji(tt) #豌豆射手攻击铁桶僵尸
    tt.gongji(wd) # 铁桶僵尸攻击豌豆射手

     写一个老师上课

    teacher_list = [] # 准备一个列表装老师
    class school: # 创建一个学校类
        def __init__(self,name): # 学校的名字
            self.name=name
        def zhaopin(self,teacher): #学校招聘老师
            teacher_list.append(teacher)
        def gongzuo(self):  #学校让老师工作
            for t in teacher_list: #准备让每一个老师工作
                t.work()
    
    class teacher: # 创建一个老师类
        def __init__(self,name): # 创建老师的名字
            self.name=name
        def work(self):  #老师工作 ,上课
            print(f'{self.name}老师在上课')
    
    xx=school('老男孩') #创建一个学校
    ls1=teacher('alex') #创建老师
    ls2=teacher('wusir')
    ls3=teacher('太白')
    xx.zhaopin(ls1) # 学校招聘老师
    xx.zhaopin(ls2)
    xx.zhaopin(ls3)
    ls1.work() #老师工作
    ls2.work()
    ls3.work()
    

     2) 关联关系  (一对一 ,一对多 ,多对多)

    #男女朋友关系 (一对一)
    class boy: #创建一个男孩类
        def __init__(self,name,girlfriend=None):
            self.name=name
        def chi(self): #男孩吃
            if self.girlfriend: #判断男孩有没有男朋友
                print(f'我今天带着{self.gorlfriend.name}去吃饭') #女朋友的名字
            else:
                print('吃什么吃,滚去学习')
        def movie(self): #同上
            if self.girlfriend:
                print(f'我今天带着{self.gorlfriend.name}去看电影')
            else:
                print('看什么看,滚去学习')
    
    class girl:
        def __init__(self,name):
            self.name=name
    
    b=boy('alex')
    g=girl('志玲')
    b.girlfriend=g
    b.chi()
    g2=gir('心如') #换了一个女朋友
    b.girlfriend=g2
    b.chi() # 带着新女朋友去吃饭
    

    3) 继承关系 最硬的关系 ,我用过了就是我的

    # class Base:
    #     def chi(self):
    #         print("我会吃")
    
    # # 派生类  => 子类
    # class Foo(Base): # 这个类继承了Base类. Foo类是对Base的一个扩展
    #     def he(self):
    #         print("我会喝")
    # f = Foo()
    # f.chi()
    # f.he()
    
    # class Cat:  # 父类 => 基类  => 超类
    #     def catch_mouse(self):
    #         print("猫可以抓老鼠")
    # class BosiCat(Cat):  # 子类 => 派生类
    #     pass
    
    # class Foo:
    #     pass
    #
    # print(hash(Foo)) # 可哈希
    # print(hash(Foo()))
    
    # 我们写好的类和创建的对象默认都是可哈希的
    
    # 去掉可哈希
    # class Foo:
    #     __hash__ = None # 当前类的对象不可哈希
    
    # print(hash(Foo)) # 可哈希
    # print(hash(Foo())) # TypeError: unhashable type: 'Foo'
    
    
    # class Foo:
    #     def chi(self, food):
    #         print("我爱吃鱼和", food)
    #
    # class Bar:
    #     def chi(self, food):
    #         print("我爱吃肉和", food)
    #
    # dic = {Foo: "鸡蛋", Bar: "香肠"}
    #
    # for k, v in dic.items():
    #     k().chi(v)
    

      

     

    2.self 到底是谁?

      self : 谁调用的就是谁的,类型是根据调用方的对象来进行变换的

      super: 表示的是父类

    3. 特殊成员 :

      __init__() #创建对象时初始化对象

      __call__() # 对象的调用 ,小括号调用的时候走这句话

      __getitem__() # 对象调用的时候默认执行 对象[ ]的时候使用

      __setitem__()# 对象调用的时候使用这句 对象[ ]=" "的时候使用

      __new__() # 开拓内存 

      __enter__() # with对象的时候

      __exit__() #with对象结束的时候使用

      __hash__() # 去除 可哈希 hash()

  • 相关阅读:
    mysql官网下载链接——绿色版&安装版
    eclipse中去掉警告提示
    java用servlet、cookie实现一个阅读记录
    eclipse中的错误解决——Servlet cannot be resolved to a type
    eclipse——jsp字体设置
    eclipse——添加Tomcat7.0服务器
    eclipse中的错误解决——The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    eclipse——JavaEE插件
    OpenMP用法大全
    __new__ __init__区别
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/10146004.html
Copyright © 2011-2022 走看看