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,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
随机推荐
- AppFabric查询工作流实例
安装 通过IIS查询工作流实例,可以操作挂起,首先打开WF+WCF的站点: 这里可以搜索工作流实例:例如根据工作流ID.创建日期.状态等查询 下方的搜索结果可以查看结果 资源 Windows Serv ...
- 029-IIS配置
安装IIS.部署网站(发布或者拷贝都可以).修改连接字符串,compilation设为false,删掉cs代码上传文件夹不给执行权限: 在iis管理器中找到上传文件夹,选择属性--执行权限,设置为“无 ...
- Unity之流光效果
效果如图: shader如下: Shader "Unlit/Walk light" { Properties { _MainTex ("Base (RGB), Alpha ...
- 服务注册发现Eureka
一 Eureka相关概念 1 Peer 2 Zone 3 Region 地理区域 3 CAP理论 4 在线扩容 5 二 注册发现 Eureka 1 搭建Server服务端 ...
- spring boot + vue + element-ui全栈开发入门——集成element-ui
一.IDE开发工具 常用的开发工具有webstorm和sublime. 我个人喜好用Atom+插件的形式 打开Atom,在file --> settings --> packages中收 ...
- JavaScript实现全屏显示
<!doctype html> <html> <head> <title>全屏显示</title> <meta charset=&qu ...
- js实现复制内容到剪切板,兼容pc和手机端,支持Safari浏览器
Javascript原生有一些事件:copy.paste.cut, 这些事件可以作用的目标元素: 能获得焦点的元素 (如contentEditable内容能编辑或者可以选中的元素),或者是<bo ...
- inotify+rsync架构实现实时同步
前序 使用inotify+rsync架构实现(文件夹/文件)实时同步, 双机之间需要ssh免密码配置(两步完成ssh免密码登录) 环境 客户端:192.168.137.176 (rsync + ino ...
- yum downloadonly模式,保存所需软件及其依赖包
command: sudo yum install --downloadonly --downloaddir='yourderictory'
- sql添加一个list的查询条件
编程中往往会有需要对某个list的值进行查询的需求,而将一个list作为查询条件,我所知道的有两种方法: 1.for循环遍历,每次循环一个sql,每次查list中一个条件的数据,最后累加 ...(最基 ...