###################总结#################

面试的时候 让写python一些特殊方法

__init__ 创建对象的时候初始化
__new__对象实例化调用第一个方法
__call__ 对象
__del__ 销毁的时候
__len__ len调用行为
__str__ str调用行为
__bytes__
__hash__
__bool__ 返回true或者false
__lt__小于
__le__小于等于
__eq__等于
__ne__不等于
__get__大于
__ge__大于等于
__add__添加
__sub__减法行为

1. 依赖关系
执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻的.
随时可以更换另外一个东西来完成此操作

class Ren():
def play(self,toos):
toos.run()
print('可以完游戏了')
class DianNao():
def run(self):
print('电脑开机了')
class ShouJi():
def run(self):
print('手机开机了')
dn=DianNao()
sj=ShouJi() r=Ren()
r.play(dn)
r.play(sj)
##########################实例二
class ZhiWu:
def __init__(self,name,xie,shanghai):
self.name=name
self.xie=xie
self.shanghai=shanghai
def gongji(self,js):
# print('植物攻击僵')
js.xie -= self.shanghai
print(f'僵尸被攻击了{self.shanghai}还剩下{js.xie}')
class JingSi:
def __init__(self,name,xie,shanghai):
self.name=name
self.xie=xie
self.shanghai=shanghai
def gongji(self,zw):#这里传入了植物
# print('僵尸咬植物')
zw.xie -= self.shanghai #
#传入植物后 就可以使用zw的血量 减去僵尸的攻击 就是剩下的血量
print(f'植物被攻击了{self.shanghai}还剩下{zw.xie}')
zw=ZhiWu('向日葵',10,10)
js=JingSi('铁桶僵尸',200,1)
zw.gongji(js)
zw.gongji(js) js.gongji(zw)

2. 关联关系
在对象里面埋对象
self.girlFriend = girl
1. 一对一关系
你和你的女朋友

self.teach_list = [t1,t2,t3]

class Boy:
def __init__(self,name,girlFriend=None):#初始化一个男孩,男孩的女孩等一girlFriend
self.girlFriend=girlFriend
def chi(self):
if self.girlFriend:#判断有没有
print(f'带着他的女朋友{self.girlFriend.name}去吃饭')
else:
print('单身狗呵呵呵')
class Girl:
def __init__(self,name,age):
self.name=name
self.age = age
b=Boy('西门庆')#创建一个男的对象
g=Girl('潘金莲',11)#创建一个女的对象
print(g.name)
b.girlFriend = g #这里的绝对值可以写写g.name但是上面的格式化输出的时候 需要直接写成{self.girlFriend}
b.chi()#执行男孩下的chi方法

2. 一对多关系
一个学校. 一堆老师

class School:
def __init__(self,name):
self.name=name
self.teacher_list=[]#用于存储老师
def zhaoping(self,teacher):
self.teacher_list.append(teacher)#这里把下面的lnh.zhaoping(t) 老师加入到列表中
def shangke(self):
for i in self.teacher_list:#循环出老师
i.work()
class Teacher:
def __init__(self,name):#t=Teacher('李白')赋值出老师
self.name=name
def work(self):
print(f"{self.name}在上课")
lnh=School('老男孩')
t=Teacher('李白')
t2=Teacher('荆轲')
lnh.zhaoping(t)
lnh.zhaoping(t2)
lnh.shangke()

类中的关系: 依赖关系是最轻的. 最重的是继承关系. 关联关系是比较微妙的.

self到底是谁?
self:谁调用的就是谁. 类型是根据调用方的对象来进行变换的
super:表示的是父类

特殊成员:


class Foo:
def __init__(self):
print("我是初始化") def __call__(self, *args, **kwargs):
print("我是靠") def __getitem__(self, item):
print("我是getitem", item)
return "大胖小子"
def __setitem__(self, key, value):
print(key, value) def __delitem__(self, key):
print(key) def __enter__(self):
print("我是进入")
return "周润发"
def __exit__(self, exc_type, exc_val, exc_tb):
print("我是出来") # 类名() __init__() 构造方法
obj = Foo()
# 对象() __call__()
obj() # python特有的.
# 对象[xxx] 从对象中获取数据 默认执行__getitem__() # 对象[xxx] = ,.... 默认执行__setitem__()
obj["汪峰"] = "章子怡" # del obj[key] 默认执行__delitem__()
del obj['马化腾']

python 面向对象(三)类与类之间的关系 初始化方法一些类的更多相关文章

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

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

  2. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

  3. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

  4. Python面向对象三要素-封装(Encapsulation)

    Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...

  5. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  6. PHP类和对象之间的关系

    类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...

  7. Java初始化方法:类、容器

    Java初始化方法:类.容器   初始化类(非final): Struts2的DefaultActionMapper类中:      public DefaultActionMapper() {   ...

  8. Python面向对象(三)

    一.绑定方法与非绑定方法 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上 ...

  9. Python面向对象三要素-多态

    Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...

随机推荐

  1. BZOJ2877 NOI2012魔幻棋盘(二维线段树)

    显然一个序列的gcd=gcd(其差分序列的gcd,序列中第一个数).于是一维情况直接线段树维护差分序列即可. 容易想到将该做法拓展到二维.于是考虑维护二维差分,查询时对差分矩阵求矩形的gcd,再对矩形 ...

  2. 【BZOJ2144】Throw 数论

    题目大意 给你三个数\(a,b,c\),每次你可以选择一个数\(s_1\),再选择一个数\(s_2\),把\(s_1\)变成\(2s_2-s_1\),但要求\(s_3\)不在\(s_1\)到\(2s_ ...

  3. 【HDU - 5845】Best Division(xor-trie、01字典树、dp)

    BUPT2017 wintertraining(15) #7E 题意 把数组A划分为k个区间,每个区间不超过L长度,每一个区间异或和之和为S.现在求:S不超过X,区间个数的最大值. 且A是这样给你的: ...

  4. 【CF865D】Buy Low Sell High(贪心)

    [CF865D]Buy Low Sell High(贪心) 题面 洛谷 CF 题解 首先有一个\(O(n^2)\)的\(dp\)很显然,设\(f[i][j]\)表示前\(i\)天手中还有\(j\)股股 ...

  5. [luogu1341]无序字母对【欧拉回路】

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 分析 欧拉回路的模板题. 暴力删边欧拉 ...

  6. [CF1132E]Knapsack【暴力搜索】

    你有一个容量为\(w\)的背包,和\(8\)件物品,重量分别为\(1~8\)的整数,分别有\(cnt_1 ... cnt_8\),求最大容量. 解法 笨蛋chh一开始打了一个背包模板乱搞压缩容量\(j ...

  7. input type=file上传控件老问题

    // 1.用INPUT控制上传文件时,点击INPUT控件出现文件选择框. // 2.如果在手机上使用时,一般不会出现这种较丑的 // 3.于是就自然想到将控件隐藏,然后用一个按钮代替,点击按钮时在函数 ...

  8. 「FJOI2016」神秘数 解题报告

    「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...

  9. luogu2605 基站选址 (线段树优化dp)

    设f[i][j]表示在第i个村庄建第j个基站的花费 那么有$f[i][j]=min\{f[k][j-1]+w[k,i]\}$,其中w[k,i]表示在k,i建基站,k,i中间的不能被满足的村庄的赔偿金之 ...

  10. 利用captcha库绘制验证码

    #导包 from captcha.image import ImageCaptcha from PIL import Image import random import time import os ...