python-面向对象:类与类之间的关系和特殊成员
# class Person: # def play(self, tools): # 通过参数的传递把另外一个类的对象传递进来 # tools.run() # print("很开心, 我能玩儿游戏了") # # # class Computer: # def run(self): # print("电脑开机. 可以运行") # # class Phone: # def run(self): # print("手机开机, 可以运行") # # # c = Computer() # phone = Phone() # # p = Person() # p.play(phone) # 写一个植物大战僵尸 # 1. 植物 # 打僵尸. 僵尸掉血 # 2. 僵尸 # 吃植物. 植物掉血 class Plant: self.name = name self.hp = hp self.ad = ad def attack(self, js): print("植物攻击僵尸") js.hp -= self.ad print(f"僵尸掉血{self.ad}, 还剩下{js.hp}") class JiangShi: def __init__(self, name, hp, ad): # 1000 800 self.name = name self.hp = hp self.ad = ad def attack(self, zw): print("僵尸咬植物") zw.hp -= self.ad print(f"植物掉血{self.ad}, 还剩{zw.hp}") # 植物 wd = Plant("歪脖子豌豆", 10, 20) # 僵尸 js = JiangShi("铁桶僵尸", 200, 1) wd.attack(js) wd.attack(js) wd.attack(js) wd.attack(js) wd.attack(js) js.attack(wd) js.attack(wd) js.attack(wd) js.attack(wd)
# class Boy: # # def __init__(self, name, girlFriend=None): # # 在初始化的时候可以给一个对象的属性设置成另一个类的对象 # self.girlFriend = girlFriend # 一个男孩有一个女朋友 # # def chi(self): # if self.girlFriend: # print(f"带着他的女朋友{self.girlFriend.name}去吃饭") # else: # print("单身狗, 吃什么吃? 滚去学习.") # # def movie(self): # if self.girlFriend: # print(f"带着他的女朋友{self.girlFriend.name}去看电影") # else: # print("单身狗, 看什么看? 滚去学习.") # # # class Girl: # def __init__(self, name): # self.name = name # # b = Boy("宝浪") # g = Girl("孙艺珍") # b.chi() # # # alex给包浪介绍了一个女朋. 孙艺珍 # b.girlFriend = g # b.chi() # # g2 = Girl("梁咏琪") # b.girlFriend = g2 # 换了个女朋友 # b.chi() class School: def __init__(self, name): self.teach_list = [] # 这里要装多个老师 self.name = name def zhaopin(self, teach): self.teach_list.append(teach) def shangke(self): for t in self.teach_list: t.work() class Teacher: def __init__(self, name): self.name = name def work(self): print(f"{self.name}在上课") lnh = School("老男孩") t1 = Teacher("武sir") t2 = Teacher("太白") t3 = Teacher("哪吒") t4 = Teacher("女神") t5 = Teacher("日天") t6 = Teacher("宝浪") lnh.zhaopin(t1) lnh.zhaopin(t2) lnh.zhaopin(t3)
# 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) # 类名 => 变量名 -> 为了今天作业 # def func(): # pass # # an = func # # an() # class Base: # def __init__(self, num): # self.num = num # def func1(self): # print(self.num) # class Foo(Base): # pass # obj = Foo(123) # obj.func1() # class Base: # def __init__(self, num): # self.num = num # def func1(self): # print(self.num) # # class Foo(Base): # def func1(self): # print("Foo. func1", self.num) # # obj = Foo(123) # obj.func1() # class Base: # def __init__(self, num): # self.num = num # def func1(self): # print(self.num) # self.func2() # def func2(self): # print("Base.func2") # # class Foo(Base): # def func2(self): # print("Foo.func2") # obj = Foo(123) # obj.func1() # 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() # 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()
lnh.zhaopin(t4) lnh.zhaopin(t5) lnh.zhaopin(t6) lnh.shangke()
# # class Foo: # def __init__(self): # 初始化操作 # print("我是init, 我是老二") # print("初始化操作. 在创建对象的时候自动调用这个方法") # # def __new__(cls, *args, **kwargs): # 创建, 它是真正的构造方法, 可以开辟内存 # print("我是new. 我是老大") # return object.__new__(cls) # # # # 为了 对象() # def __call__(self, *args, **kwargs): # print("我是对象()") # # # 对象[] # def __getitem__(self, item): # print("item=",item) # print("你执行了__getitem__") # return "哈哈" # # # 对象[key] = value # def __setitem__(self, key, value): # print("key, ", key) # print("value, ", value) # # # del lst[1] # def __delitem__(self, key): # print("key=", key) # # # with 对象: # def __enter__(self): # print("我是enter") # # # with 对象: 代码执行完毕. 最后执行这里 # def __exit__(self, exc_type, exc_val, exc_tb): # print("我叫exit") # # def __len__(self): # print("我的天哪") # return 3 # # # f = Foo() # 自动执行__init__() # f() # 调用-> __call__() # print(callable(f)) # 对象() # print(f["李嘉诚"]) # 自动调用__getitem__() # f['jay'] = "林俊杰" # del f['哈哈'] # with f: # print("我是哈哈哈哈") # with open() : # lst = ["孙艺珍", "李金珠", "井柏然"] # # lst[2] # =>自动的调用__getitem__() # def func(): # pass # func = 3 # print(callable(func)) # 判断xxx是否是可调用的 # # f.__init__() # 第一次这么写. 以后别这么写 # lst = [1,2,3,4] # it = iter(lst) # # print(it.__next__()) # # print(next(it)) # __next__() # 面试之前翻一番 # 写出15个特殊成员, 并给出具体作用 # class H: # country = "大清" # # print(H.country) # 面向对象编程的执行流程 -> # 1. 加载类 -> 给类创建一个名称空间 -> 主要存放类变量. # 2. 创建对象 -> 先找类. -> 根据类来开辟内存 -> 执行类中的__new__() -> 执行__init__() -> 返回对象 class Student: def __init__(self, name, no, gender, cls, age): self.name = name self.no = no self.gender = gender self.cls = cls self.age = age # 这个对象字符串的表示. def __str__(self): # 返回该对象的字符串表示形式 return f"{self.name}, {self.no}, {self.gender}" def __repr__(self): # 该对象的官方的字符串表示形式 return f"{self.name}, {self.no}, {self.gender}" s = Student(") print(s)
python-面向对象:类与类之间的关系和特殊成员的更多相关文章
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
- JAVA面向对象-----接口与类、接口之间的关系
接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...
- Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法
Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...
- PHP类和对象之间的关系
类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...
- Python面向对象之接口类(抽象类)
Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...
- python包管理工具他们之间的关系
python包管理工具之间的关系 现在的python包管理工具有很多,非常混乱,必须理清他们之间的关系才能更好的使用python构建强大的包关系系统工具. 首先:python官方推荐的第三方库是PyP ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- Python面向对象1:类与对象
Python的面向对象- 面向对象编程 - 基础 - 公有私有 - 继承 - 组合,Mixin- 魔法函数 - 魔法函数概述 - 构造类魔法函数 - 运算类魔法函数 # 1. 面向对象概述(Objec ...
- Python面向对象编程、类
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
随机推荐
- 队列ADT
队列 队列是FIFO表,使用队列时在队尾(rear)插入元素,称之为入队(enqueue),以及在对头(front)删除并返回元素值,称之为出队(dequeue). 任何表的实现都可以用于实现队列结构 ...
- MySQL数据排序asc、desc
数据排序 asc.desc1.单一字段排序order by 字段名称 作用: 通过哪个或哪些字段进行排序 含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多 ...
- 【题解】Luogu P2730 魔板
蒟蒻的第一道蓝题--好像也没有蓝的程度 一篇无STL的超弱题解(入门写法无误了QAQ 传送门 很经典的一道BFS 这是初始状态. 操作A 操作B 操作C 思路1 不使用cantor展开的情况 1. 对 ...
- Docker Kubernetes 介绍 or 工作原理
Kubernetes 介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容 ...
- Docker Kubernetes 容器重启策略
Docker Kubernetes 容器重启策略 当容器被创建时,容器会根据重启策略来进行容器重启. 支持三种策略: Always:当容器终止退出后,总是重启容器,默认策略. OnFailure:当容 ...
- postman+linux+pistache的http通信过程
一.pistache配置 1.安装cmake[https://www.cnblogs.com/judes/p/10327638.html] 2.下载pistache[git:https://githu ...
- Ubuntu如何自定义tftp服务根目录
答:修改/etc/default/tftpd-hpa中的TFTP_DIRECTORY即可,默认TFTP_DIRECTORY="/var/lib/tftpboot"
- P4512 【模板】多项式除法
思路 多项式除法板子 多项式除法 给出\(A(x)\)和\(B(x)\),求一个\(n-m\)次的多项式\(D(x)\),一个\(m-1\)次多项式\(R(x)\),满足 \[ A(x)=B(x)D( ...
- Navicat Premium 12激活
大自然的搬运工:https://www.jianshu.com/p/5f693b4c9468 声明:本文所提供的所有软件均来自于互联网,个人存放在此作为备用,以备将来不时之需,同时作为大家的分享和学习 ...
- 【SMTP】常见错误码
'* 邮件服务返回代码含义 '* 500 格式错误,命令不可识别(此错误也包括命令行过长) '* 501 参数格式错误 '* 502 命令不可实现 '* 503 错误的命令序列 '* 504 命令参数 ...