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,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
随机推荐
- Mysql InnoDB 数据更新/删除导致锁表
一. 如下对账表数据结构 create table t_cgw_ckjnl ( CNL_CODE ) default ' ' not null comment '通道编码', CNL_PLT_CD ) ...
- C#设计模式(12)——享元模式(Flyweight Pattern)(转)
一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...
- Select input 两个元素的宽度高度跟设定值不一致的问题
在做登录框的时候,需要一个select 元素作为账号输入,一个input作为密码输入框.在css 文件中,将这两个元素的position 设置为relative ,并且width 设置为100%.刷新 ...
- 【转】jira迁移数据
jira迁移数据有两种方式 方式一: jira系统自带的备份恢复操作 最简单的,但不一定能成功 从/export/atlassian/application-data/jira/export下载至 ...
- Python 第五阶段 学习记录之--- Web框架
什么是web服务器的原理是什么 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyt ...
- 基于CSS属性display:table的表格布局的使用
项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的table表格,没有单元格的属性和样式,经过一番思考,曲折现实了单元格 ...
- 像素与DPI之间的关系
先说像素.像素是电子图像组成的基本单位,将图像放大数倍,会发现图像是由一个个“小色块”紧密排列组成的,每一个“小色块”就是一个像素点. 也就是说,每个图像都是由n多个像素点组成. 再说分辨率.所谓分辨 ...
- WSDL文档结构图
- java String 类型总结
java中String是个对象,是引用类型?,基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构,基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型 ...
- Eclipse创建Maven Web项目后更改Servlet版本
Eclipse创建Maven Web项目后更改Servlet版本 1.场景基于Eclipse通过maven-archetype-webapp原型创建一个Web项目后,其默认Servlet版本是2.3, ...