python类与类的关系

类与类之间的关系(依赖关系,大象与冰箱是依赖关系)

class DaXiang:
    def open(self, bx): #  这里是依赖关系. 想执行这个动作. 必须传递一个bx
        print("大象高高兴兴走到了冰箱的面向前")
        bx.kai() # 传递来的对象执行kai()动作
        print("大象成功的打开了冰箱门")

    def zhuang(self):
        print("自己走进了冰箱")

    def close(self, bx):
        print("大象要关冰箱门了")
        bx.guan()

class BingXiang:
    def kai(self):
        print("我是冰箱. 我会开门 ")
    def guan(self):
        print("我是冰箱. 我会关门 ")
bx1 = BingXiang()
bx2 = BingXiang()
dx = DaXiang()

dx.open(dfg)
dx.zhuang()
dx.close(dfg)

例二 植物大战僵尸

# 植物大战僵尸. 创建一个植物. 创建一个僵尸
# 植物: 名字, 攻击力
# 僵尸: 名字, 血量
# 植物可以打僵尸. 僵尸掉血
# 显示出僵尸挨揍之后的血量
class ZhiWu:
    def __init__(self, name, attack, hp):
        self.name = name
        self.attack = attack
        self.hp = hp

    def fight(self, js):
        js.hp -= self.attack

class JiangShi:
    def __init__(self, name, hp, attack):
        self.name = name
        self.hp = hp
        self.attack = attack

    def chi(self, zhiwu):
        zhiwu.hp -= self.attack

lvluo = ZhiWu("绿萝", 20, 10)
js1 = JiangShi("僵尸一号", 100, 5)
lvluo.fight(js1)
lvluo.fight(js1)
lvluo.fight(js1)

js1.chi(lvluo)
js1.chi(lvluo)
js1.chi(lvluo)
print(lvluo.hp)
print(js1.hp)

?. 关联关系.组合关系, 聚合关系
其实这三个在代码上写法是?样的. 但是, 从含义上是不?样的.
1. 关联关系. 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更改和更换的.
2. 聚合关系. 属于关联关系中的?种特例. 侧重点是xxx和xxx聚合成xxx. 各?有各?的
声明周期. 比如电脑. 电脑?有CPU, 硬盘, 内存等等. 电脑挂了. CPU还是好的. 还是
完整的个体
3. 组合关系. 属于关联关系中的?种特例. 写法上差不多. 组合关系比聚合还要紧密. 比
如?的?脑, ?脏, 各个器官. 这些器官组合成?个?. 这时. ?如果挂了. 其他的东?
也跟着挂了

关联关系
简单来说就是一对一的关系
例子一
class Boy:
    def __init__(self, name, girlFriend = None):
        self.name = name
        self.girlFriend = girlFriend # 关联关系
    def chi(self): # b
        if self.girlFriend:
            self.girlFriend.happy()
            print("%s和%s在吃饭"  %  (self.name, self.girlFriend.name))
        else:
            print("没女朋友吃什么吃")

class Girl:
    def __init__(self, name):
        self.name = name

    def happy(self):
        print("有好吃的就开心")

b = Boy("王明")
g = Girl("肉丝")
# b对象的girlFriend赋值  g

b.girlFriend = g # 突然天降女朋友
b.chi()
b.girlFriend = None
b.chi()例例二老师和学生的关系. 一对多的关系  反过来就是一对一
class Teacher:
    def __init__(self, name, lst=None):
        self.name = name
        if lst == None: # 判断传递过来的参数是否是空
            self.lst = []
        else: # 传递过来的是一个列表
            self.lst = lst

    # 添加学生
    def tianjia(self, student):
        self.lst.append(student)

    def display(self):
        for s in self.lst: # s 是老师的学生
            print(s.name)

class Student:
    def __init__(self, num, name, teacher=None):
        self.name = name
        self.num = num
        self.teacher = teacher
t = Teacher("大张伟")
s1 = Student(1, "郭德纲")
s2 = Student(2, "岳云鹏")
s3 = Student(3, "张鹤伦")
s4 = Student(4, "朱云峰")

t.tianjia(s1) # 把学生添加给老师
t.tianjia(s2)
t.tianjia(s4)
# 帖子和评论
class Tie:
    def __init__(self, title, content, author, time, pinglun_lst = None):
        self.title = title
        self.content = content
        self.author = author
        self.time = time
        if pinglun_lst == None:
            self.pinglun_lst = []
        else:
            self.pinglun_lst = pinglun_lst

class Pinglun:
    def __init__(self, name, time, content, fav):
        self.name = name
        self.time = time
        self.content = content
        self.fav = fav

pl1 = Pinglun("UZI", "昨天1", "UZI发出祝福",1888888)
pl2 = Pinglun("xiaohu", "昨天2", "UZI发出祝福",1888888)
pl3 = Pinglun("若风", "昨天3", "UZI发出祝福",1888888)
pl4 = Pinglun("let me", "昨天3", "UZI发出祝福",1888888)
pl5 = Pinglun("长长", "昨天4", "UZI发出祝福",1888888)
pl6 = Pinglun("jackylove", "昨天5", "UZI发出祝福",1888888)
pl7 = Pinglun("mlxg", "昨天6", "UZI发出祝福",1888888)
pl8 = Pinglun("miss", "昨天7", "UZI发出祝福",1888888)

lst = []
lst.append(pl1)
lst.append(pl2)
lst.append(pl3)
lst.append(pl4)
lst.append(pl5)
lst.append(pl6)
lst.append(pl7)
lst.append(pl8)

# 显示帖子的内容.  评论的内容
tie = Tie("S8_IG夺冠. 王思聪怒吃热狗. ", "IG的上单The Shy疯了一样. 一个打5个. 自己人都不放过", "王明","某年某月某一天",lst )
print(tie.content)

# 评论
# print(tie.pinglun_lst)
for pl in tie.pinglun_lst:
    print(pl.content)
继承关系,指的是子类继承父类除私有属性外所有的属性.
class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)
        self.func2()

    def func2(self):
        print(111, self.num)

class Foo(Base):
    def func2(self):
        print(222, self.num)

lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
    obj.func2()
四. 类中的特殊成员
 什么是特殊成员呢? __init_()就是?个特殊的成员. 说?了. 带双下划线的那?坨. 这些?
法在特殊的场景的时候会被?动的执?. 比如,
1. 类名() 会?动执?__init__()
2. 对象() 会?动执?__call__()
3. 对象[key] 会?动执?__getitem__()
4. 对象[key] = value 会?动执?__setitem__()
5. del 对象[key] 会?动执? __delitem__()
6. 对象+对象 会?动执? __add__()
7. with 对象 as 变量 会?动执?__enter__ 和__exit__
8. 打印对象的时候 会?动执? __str__
9. ?掉可哈希 __hash__ == None 对象就不可哈希了.
创建对象的真正步骤:
 ?先, 在执?类名()的时候. 系统会?动先执?__new__()来开辟内存. 此时新开辟出来的内
存区域是空的. 紧随其后, 系统?动调?__init__()来完成对象的初始化?作. 按照时间轴来算.
1. 加载类
2. 开辟内存(__new__)
3. 初始化(__init__)
4. 使?对象?xxxxxxxxx

类似的操作还有很多很多. 我们不需要完全刻意的去把所有的特殊成员全都记住. 实战中也
?不到那么多. ?到了查就是了.

  

  

 

  

 

  

原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/9965399.html

时间: 2024-10-13 19:35:32

python类与类的关系的相关文章

Python设计模式 - 基础 - 类与类之间的六种关系

在程序中需要把世间万物抽象成相应的类,现实世界中物与物之间的关系和程序中类与类之间的关系相对应,因为世间万物是普遍联系的,所以程序中类与类之间也不是孤立的.在系统分析和框架设计中,根据面向对象机制的三大特性:封装.继承.多态,归纳和扩展出类与类之间六种不同的关系: - 依赖关系Dependency: 在局部变量,方法的形参,或者对静态方法的调用中实现 - 关联关系Association: 在类的成员变量中实现,可以双向也可以单向 - 聚合关系Aggregation: 强关联,整体与部分的关系,但

python类与类之间的关系

在面向对象中,类和类之间也可以产生相关的关系类中的关系: 依赖关系是最轻的,最重的是继承关系,关联关系是比较微妙的 依赖关系执行某个动作的时候,需要xxx来帮助完成这个操作,此时的关系是最轻的.随时可以更换另外一个东西来完成此操作 1 class Person: 2 def f1(self,tools): # 通过参数的传递把另外一个类的对象传递进来 3 tools.run() 4 print('皮一下很开心') 5 class Computer: 6 def run(self): 7 prin

python 类与类之间的关系

一.依赖关系(紧密程度最低) (1)简单的定义:就是方法中传递一个对象.此时类与类之间存在依赖关系,此关系比较低. (2)实例植物大战僵尸简易版 题目要求:创建一个植物,创建一个僵尸 1.植物:名字.血量,攻击力 2.僵尸:名字.血量.攻击力 3.植物可以打僵尸,僵尸掉血 4.植物被僵尸咬,植物掉血 # 植物大战僵尸简易版 class ZhiWu:#创建植物类 def __init__(self,name,hp,attack):#初始化属性 self.name=name self.hp=hp s

python之路---18 类与类之间的关系

三十七.类与类之间的关系 一.依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作      随时可以更换另外一个东西来完成此操作 此时的关系是最轻的. 二.关联关系(组合关系,聚合关系) 1.一对一关系 2.一对多关系 三.继承关系       (这是最重的关系) self在访问?法的顺序: 永远先找??的. ??的找不到再找?类的 父类  ==    基类  ==  超类 子类 ==    派生类 我们写的类和对象都是可哈希的 如果加上   __hash__ = None    对

Python进阶编程 类与类的关系

类与类的关系 依赖关系 # 依赖关系: 将一个类的类名或者对象传给另一个类的方法中. class Elephant: def __init__(self, name): self.name = name def open(self,r1): # print(ref1) print(f'{self.name}默念三声: 芝麻开门') r1.open_door() def close(self): print('大象默念三声:芝麻关门') class Refrigerator: def __init

python学习笔记-类的descriptor

descriptor应用背景 所谓描述器,是实现了描述符协议,即get, set, 和 delete方法的对象. 简单说,描述符就是可以重复使用的属性. 比如以下代码: f = Foo() b = f.bar f.bar = c del f.bar 在解释器执行上述代码时,当发现你试图访问属性(b = f.bar).对属性赋值(f.bar = c)或者删除一个实例变量的属性(del f.bar)时,就会去调用自定义的方法. 为什么把对函数的调用伪装成对属性的访问?有什么好处? 从property

Python中的类(下)

本文将介绍一下类的构造函数和初始化函数,以及如何通过"魔术方法"定制一个类. 类构造和初始化 在前面的文章中,经常使用初始化函数"__init__",下面看看"__init__"和"__new__"的联系和差别. 下面先通过一段代码看看这两个方法的调用顺序: class A(object): def __init__(self,*args, **kwargs): print "init %s" %self.

python之7-2类的继承与多态

类的继承的意思就如同父子关系一样,这个儿子继承了父亲的一切,但是在某些地方(属性)相同的时候,儿子的属性大于老子的属性(覆盖),最底层类,总会继承最接近它的那个类的属性init 类的多态总是和继承相连的,没有继承,就没有多态一说.一个子类的实例,它即属于这个子类,也属于父类,比如:父亲A和儿子B,儿子B即属于儿子类,也属于人类,但是它不属于父亲类 多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式.在处理多态对象时,只需要关注它的接口即

Python中的类(classes)

Python的类机制使用尽可能少的新语法和语义将类引入语言.python的类提供了面向对象程序设计语言所有的 标准特性:类继承机制允许有多个基类,一个派生类可以覆盖基类中的任何方法,一个方法可以使用相同的名字调用 基类中的方法. Table of Contents 1 名字和对象 2 Python的域(scopes)和名称空间(namespaces) 3 初识类 3.1 定义类 3.2 类对象 3.3 实例化对象 3.4 方法对象 4 漫谈 5 派生 6 多重继承 7 私有变量和类局部引用 8