内容梗概:
1. 依赖关系
2. 关联关系, 组合关系, 聚合关系
3. 继承关系, self到底是什什么鬼?
4. 类中的特殊成员 1. 依赖关系
def:在方法中给方法传递一个对象. 此时类与类之间的关系是最轻的,
我⽤用着你. 但是你不属于我. 这种关系是最弱的.比如临时工. 详见实例:
class JiangShi():
def __init__(self,name,HP):
self.name = name
self.HP = HP
def beida(self): #方法中给方法传递一个对象
print("我是僵尸%s,我被暴打了一顿"%(self.name)) class ZhiWu():
def __init__(self,name,power,jineng):
self.name = name
self.power = power
self.jineng = jineng
def attack(self,el):
print("我是植物%s,我刚刚用%s攻击了僵尸%s"%(self.name,self.jineng,el.name ))
el.beida()
el.HP -= self.power
print("%s血量还剩下%s"%(el.name,el.HP)) zw = ZhiWu("小菊花",10,"无敌萌萌拳")
js = JiangShi("小可爱",1000)
zw.attack(js)
zw.attack(js) 2. 关联关系, 组合关系, 聚合关系
定义:
1. 关联关系. 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更更改和更更换的.
2. 聚合关系. 属于关联关系中的一种特例例. 侧重点是xxx和xxx聚合成xxx. 各⾃有各⾃的声明周期.
比如电脑. 电脑里里有CPU, 硬盘, 内存等等. 电脑挂了了. CPU还是好的. 还是完整的个体
3. 组合关系. 属于关联关系中的一种特例.写法上差不多.组合关系比聚合还要紧密.比如人的大脑,心脏,各个器官.
这些器官组合成⼀个人. 这时. 人如果挂了了. 其他的东⻄也跟着挂了.
实例1:男女朋友
class Boy():
def __init__(self,name,girlfriend=None):
self.name = name
self.girlfriend = girlfriend
def chi(self):
if self.girlfriend:
print("%s和%s在街边吃麻辣烫"%(self.name,self.girlfriend.name))
else:
print("单身狗自己在家抠脚就好")
class Girl:
def __init__(self,name):
self.name = name
b1 = Boy("小鲜肉")
g1 = Girl("小白菜")
b1.girlfriend = g1
b1.chi()
b1.girlfriend = None
b1.chi() 实例2:老师和学生
class Teacher():
def __init__(self,name,student_list = None):
self.name = name
if student_list == None:
self.student_list = []
else:
self.student_list = student_list def add(self,stu):
self.student_list.append(stu) def show(self):
for el in self.student_list:
print(el.name) class Student():
def __init__(self,num,name):
self.name = name
self.num = num s1 = Student(1,"宋小宝")
s2 = Student(2,"赵四")
s3 = Student(3,"刘能")
s4 = Student(4,"小沈阳")
t1 = Teacher("赵本山",[s1,s2])
t1.add(s3)
t1.add(s4)
t1.show() 3.继承关系, self到底是什什么鬼?
定义:继承
在⾯面向对象的世界中存在着继承关系. 我们现实中也存在着这样的关系. 我们说过. x是⼀种y, 那x就可以继承y.
这时理解层⾯面上的.如果上升到代码层⾯.我们可以这样认为.子类在不影响父类的程序运行的基础上对父类进行的扩充和扩展.
这里.我们可以把父类被称为超类或者基类. 子类被称为派生类. 3.1注意tips:
首先, 类和对象默认都是可哈希的 class Foo:
def __init__(self):
pass
def method(self):
pass
__hash__ = None
print(hash(Foo))
print(hash(Foo()))
既然可以hash. 那就是说字典的key可以是对象或者类 3.2 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.func1() #做完这个基本就会了
总结:
1.self在访问方法的顺序: 永远先找⾃己的. ⾃己的找不到再找父类的
2.不管方法之间如何进行调用. 类与类之间是何关系, 默认的self都是访问这个方法的对象 4. 类中的特殊成员
4.1 列举特殊成员
__init__() ,当构建生成对象时自动调用
__getitem__() ,当调用索引类操作的时候会自动调用 对象[索引]
__setitem__() ,当创建字典时会自动调用 对象[key] = values
__delitem__() ,当删除字典,自动调用 del 对象[key]
__enter__(),__exit__() ,当使用文件操作, with 对象 as 变量, 的时候进入和退出时自动调用
__call__() ,调用方法或函数时,对象()
__add__() ,有加法的时候会自动调用 +
__str__() ,当打印输出的时候,会自动调用(平民输出)
__repr__() ,当打印输出的时候,会自动调用(官方输出)
__hash__ == None ,此方法可是对象不可哈希
__len__() ,当调用查询对象长度时 len(对象)
__dir__() 当查询对象方法时自动调用 dir(对象)
__iter__() 对可迭代对象进行迭代会自动调用. 如for 变量 in 可迭代对象
__bool__() 点用布尔值的时候 bool(对象) 创建对象的真正步骤:
首先, 在执行类名()的时候. 系统会⾃动先执行__new__()来开辟内存. 此时新开辟出来的内存区域是空的.
紧随其后, 系统⾃动调用__init__()来完成对象的初始化工作. 按照时间轴来算.
1. 加载类
2. 开辟内存(__new__)
3. 初始化(__init__)
4. 使用对象⼲干xxxxxxxxx 实例1:
class Car:
def __init__(self, color, pai): # 初始化方法
print("哪有地呀")
self.color = color
self.pai = pai # 这里才是真正的构造方法
def __new__(cls, *args, **kwargs):
print("我的天哪")
# 固定的返回值
return object.__new__(cls) c = Car("红色", "京A66666") # 先执行__new__ 返回object.__new__(cls).把返回的空对象传递给 __init__() print(c.color)

python面向对象之 类的关系的更多相关文章

  1. Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

    Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...

  2. python 面向对象与类的基本知识

    一  什么是面向对象,面向对象与类的关系. 面向对象的程序设计是用来解决扩展性. 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象 ...

  3. Python 面向对象之一 类与属性

    Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...

  4. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  5. python面向对象(二)——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  6. python 面向对象(类)--学习笔记

    面向对象是一种编程方式, 主要集中在类和对象的两个概念 python 中的类符合封装, 继承, 多态的特征 类 是一个模板, 是n多函数的集成 对象 是类的实例化 类的成员分为三大类:字段.方法.属性 ...

  7. python 面向对象(三)类与类之间的关系 初始化方法一些类

    ###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...

  8. Python 面向对象基础(类、实例、方法、属性封装)

    python是面向对象语言,一切皆对象. 面向过程: 变量和函数. “散落” 在文件的各个位置,甚至是不同文件中.看不出变量与函数的相关性,非常不利于维护,设计模式不清晰. 经常导致程序员,忘记某个变 ...

  9. python面向对象、类、socket网络编程

    类和对象 python3统一了类与类型的概念:类==类型:从一组对象中提取相似的部分就是类:特征与技能的结合体就叫做对象: 类的功能: 初始实例化: 属性引用: 1.数据属性: 2.函数属性: 对于一 ...

随机推荐

  1. bzoj1565: [NOI2009]植物大战僵尸 最大权闭合子图,tarjan

    bzoj1565: [NOI2009]植物大战僵尸 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1565 思路 很容易的想到最大权闭合子图 ...

  2. Linux/shell: Concatenate multiple lines to one line

    $ cat file START Unix Linux START Solaris Aix SCO 1. Join the lines following the pattern START with ...

  3. Perl关联数组用法集锦

    本文和大家重点讨论一下Perl关联数组的概念,创建Perl关联数组,从数组变量复制到Perl关联数组,元素的增删,用Perl关联数组循环等内容,相信通过本文的学习你对Perl关联数组的用法一定会有深刻 ...

  4. Oracle Single-Row Functions(单行函数)——NULL-Related Functions

    参考资料:http://docs.oracle.com/database/122/SQLRF/Functions.htm#SQLRF006 Single-row functions return a ...

  5. Oracle(限定查询2)

    3.2 对数据进行限定查询 在标准SQL之中定义了许多的运算符. 3.2.1.关系运算符 范例: 范例: 范例: 在使用关系运算符判断字符数据的时候注意大小写的编写问题.因为Oracle是区分大小写的 ...

  6. Qt5.WebView.添加节点的测试代码

    1.代码: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QWebFrame& ...

  7. Android之StrictMode

    1. StrictMode是什么? StrictMode is a developer tool which detects things you might be doing by accident ...

  8. 学习笔记58—3D杯子设计

    软件下载:http://www.i3done.com/ 界面如下: 3D杯子设计步骤(参考:http://www.i3done.com/news/video/402.html): 生成杯体 1.点击基 ...

  9. 学习笔记42—Win7下安装Linux双系统

    1.下载Linux镜像:http://mirrors.163.com/ubuntu-releases/18.04.1/ 方法一: 1.用软通牒软件将Linux的镜像写入空的优盘中, 具体如下: 1) ...

  10. Study之2 Glance相关操作-devstack

    1,Glance的image是存储在backend中,backend配置在: /etc/glance/glance-api.conf.2, devstack默认:image 存放在控制节点本地目录 / ...