python 类与类之间的关系

一、依赖关系(紧密程度最低)

  (1)简单的定义:就是方法中传递一个对象。此时类与类之间存在依赖关系,此关系比较低。

  (2)实例植物大战僵尸简易版

    题目要求:创建一个植物,创建一个僵尸

        1、植物:名字、血量,攻击力

        2、僵尸:名字、血量、攻击力

        3、植物可以打僵尸,僵尸掉血

        4、植物被僵尸咬,植物掉血      

# 植物大战僵尸简易版
class ZhiWu:#创建植物类
    def __init__(self,name,hp,attack):#初始化属性
        self.name=name
        self.hp=hp
        self.attack=attack
    def da(self,js):
        js.hp-=self.attack

class JiangShi:#创建僵尸类
    def __init__(self,name,hp,attack):#初始化属性
        self.name=name
        self.hp=hp
        self.attack=attack
    def eat(self,zw):
        zw.hp -= self.attack
# 创建僵尸和植物对象
zw=ZhiWu("紫罗兰",20,10)
js=JiangShi("躺尸",30,5)
# 植物攻击一次
zw.da(js)
print(js.hp)#20
# 僵尸攻击一次
js.eat(zw)
print(zw.hp)#15

二、关联关系(组合、聚合)

  1、简单的定义:两种事物必须是相互关联的,在某种特殊情况下是可以更改和更换的 。

  2、聚合关系:属于关联关系中的特例,重点是xx和xx聚合成的xxx。各个零部件也可以单独工作。

  3、组合关系:组合关系是比较紧密的一种关系,一损俱损。

  4、常见格式(一对一或者一对多模式)    

def __init__(self,name,xxxlist=None);
    self.name=name
    self.xxxlist=xxxlist

def __init__(self,name,teacher=None):
    self.teacher=tercher

  5、实例:老师和学生模型(老师对学生是一对多,学生对老师是一对一)

# 创建老师类 老师能选学生
class Teacher:
    def __init__(self,name,stu_lst=None):
        self.name=name
        if stu_lst:# 判断传递过来的参数是否是空
            self.stu_lst=stu_lst
        else:
            self.stu_lst=[]
    def tianjia(self,stu):#添加学生功能
        self.stu_lst.append(stu.name)
    def display(self):#显示老师对应的学生
        for i in self.stu_lst:
            print(i,end=",")
# 创建学生类
class Student:
    def __init__(self,num,name,teacher=None):
        self.num=num
        self.name=name
        self.techer=teacher
# 创建1个老师,5个学生
t=Teacher("黄日中")
s1=Student(1,"郭德纲")
s2=Student(2,"岳云鹏")
s3=Student(3,"张杰")
s4=Student(4,"谢啦")
s5=Student(5,"沈腾")
# 添加学生
t.tianjia(s1)
t.tianjia(s2)
t.tianjia(s3)
t.tianjia(s4)
t.tianjia(s5)
# 显示老师学生列表
t.display()#郭德纲,岳云鹏,张杰,谢啦,沈腾,

三、简单的继承

  核心self:谁调用,self就是谁。

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()

#结果111 1 111 2 222 3
class UserInfo(object):
    pass

class Department(object):
    pass

class StarkConfig(object):
    def __init__(self, num):
        self.num = num
    def changelist(self, request):
        print(self.num, request)
    def run(self):
        self.changelist(999)

class RoleConfig(StarkConfig): #继承 StarkConfig
    def changelist(self, request):
        print(666, self.num)

class AdminSite(object):
    def __init__(self):
        self._registry = {} #空字典
    def register(self, k, v):
        self._registry[k] = v(k)

site = AdminSite()
site.register(UserInfo, StarkConfig)
site.register(Department, RoleConfig)
# site._registry{UserInfo:StarkConfig(UserInfo),Department:RoleConfig(Department)}
for k, row in site._registry.items():
    row.run()
# UserInfo,999 666,Department

四、类里面的特殊成员

  1、类名() 会自动执行__new__(cls,*args,**kwargs)  创建对象,开辟内存

  2、类名()会自动执行__init__(self)  对象初始化

  3、对象()会自动执行__call__( )

  4、对象[key]会自动执行__getitem__( )

  5、对象[k]=value 会自动执行 __setitem__( )

  6、del 对象[key] 会自动执行 __delitem__( )

  7、对象+对象 会自动执行 __add__( )

  8、with 对象 as 变量 会自动执行 __enter__( )和__exit__( )

  9、干掉hash __hash__ ==None  对象就不可以hash

  10、对象可以迭代  __iter__( )

  

  

        

  

原文地址:https://www.cnblogs.com/angle6-liu/p/9936483.html

时间: 2024-10-08 19:58:46

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

PHP类和对象之间的关系

类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: --对象的状态(属性):当施加操作时对象如何反应,例如,电视机的外形.尺寸.颜色等: 例子: 根据一份配置单组装六十台电脑,配置单里每增加一项配置,60台电脑各增加一厢配置. 1.配置单就是要创建的"类": 2.60台电脑就是创建的对象: 3.60台电脑间没有连系: 二.如何抽象一个类 1.

3.2-面向对象(类与对象之间的关系)

3.2 类与对象的关系 使用计算机语言就是不断的在描述现实生活中的事物. java中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义. 对象即是该类事物实实在在存在的个体 . 3.2.1  类与对象( 图例) 3.2.2  类的定义 生活中描述事物无非就是描述事物的属性和行为. ?  如:人有身高,体重等属性,有说话,打球等行为. Java中用类class来描述事物也是如此 ?  属性:对应类中的成员变量. ?  行为:对应类中的成员函数. 定义类其实在定义类中的成员(成员变量和成员函

UML图类,接口之间的关系

UML图类之间的关系(来自大话设计模式中的一张图,代表了类,接口之间的各种关系) 原文地址:https://www.cnblogs.com/linlf03/p/9735917.html

什么是类,什么是对象,类和对象之间的关系

类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分. 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.一个对象由一组属性和对这组属性进行操作的一组服务组成.从更抽象 的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用:它是一组属性和有权对这

【PHP面向对象(OOP)编程入门教程】2.什么是类,什么是对象,类和对象之间的关系

类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分. 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.一个对象由一组属性和对这组属性进行操作的一组服务组成.从更抽象 的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用:它是一组属性和有权对这

Java 中判断类和实例之间的关系

判断类与实例的关系有以下三种方式 1.instanceof关键字,用来判断对象是否是类的实例 (对象 => 类 )   2.isAssignableFrom,用来判断类型间是否存在派生关系 (类 = > 类)   3.isInstance方法,用来判断对象是否属于某个类型的实例 (类 => 对象 //use instanceof,用来判断对象是否是类的实例 System.out.println(new A() instanceof B);//类型比较 //use isAssignable

Python包管理工具之间的关系

转自http://www.nowamagic.net/academy/part/13/302/ 当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils, 显得较为混乱. 而将来的工具链组合非常简单:pip + distutils2. 1. distutils : Python 自带的基本安装工具,适用于非常简单的应用场景,使用: 为项目创建 setup.py 脚本. 执行 setup.py install 可进行安装. 2.

类、接口、实现之间的关系

类可以看成是一个个抽象的对象的宏观描述,例如:人, 类的成员分为字段和方法 程序中的字段对应:人的嘴.有脸 程序中的方法对应:人能干活.说话 程序中的对象对应:张三.李四(是造物者已经实实在在造出的人) 实现类.接口类.调用之间的关系是什么呢?我们可以用我们生活中插座来举例子 程序中的接口对应:三线插座接口.二线插座接口,其中三线插座接口的标准都是一样的,即都有同样的功能:例如:三线插座接口外部有三个孔(字段).能够通电(方法) 程序中的实现对应:不同三线接口的实现可以是不一样的.例如:三个孔的

java 类与类之间的关系 及uml图

类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(association) 聚合关系(aggregation) 合成关系 (compostion) 依赖关系 (dependency) 1.泛化(Generalization)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系.一般化的关系是从子类指向父类的,与继承或实现的方法相反.

静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #include<iostream> void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void