day 24 组合的补充
一、组合的补充:
1、类或对象可以做字典的key
2、对象中到底有什么?
# class Foo(object):
#
# def __init__(self,age):
# self.age = age
#
# def display(self):
# print(self.age)
#
# data_list = [Foo(8),Foo(9)]
# for item in data_list:
# print(item.age,item.display())
对象中到底有什么
# by luffycity.com # ### 1. 类或对象是否能做字典的key
"""
class Foo:
pass user_info = {
Foo:1,
Foo():5
} print(user_info)
"""
# ### 2. 对象中到底有什么? # class Foo(object):
#
# def __init__(self,age):
# self.age = age
#
# def display(self):
# print(self.age)
#
# data_list = [Foo(8),Foo(9)]
# for item in data_list:
# print(item.age,item.display()) # ### 3. # class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# class RoleConfig(StarkConfig):
#
# def changelist(self,request):
# print('666')
#
# # 创建了一个列表,列表中有三个对象(实例)
# # [ StarkConfig对象(num=1), StarkConfig对象(num=2), RoleConfig对象(num=3) ]
# config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
# for item in config_obj_list:
# print(item.num) # 1 2 3 # ### 4.
# class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# class RoleConfig(StarkConfig):
# pass
#
# # 创建了一个列表,列表中有三个对象(实例)
# # [ StarkConfig对象(num=1), StarkConfig对象(num=2), RoleConfig对象(num=3) ]
# config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
# for item in config_obj_list:
# item.changelist(168)
# # #### 5
# class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# class RoleConfig(StarkConfig):
#
# def changelist(self,request):
# print(666,self.num)
#
# # 创建了一个列表,列表中有三个对象(实例)
# # [ StarkConfig对象(num=1), StarkConfig对象(num=2), RoleConfig对象(num=3) ]
# config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
# for item in config_obj_list:
# item.changelist(168) # #### 6 # class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# def run(self):
# self.changelist(999)
#
# class RoleConfig(StarkConfig):
#
# def changelist(self,request):
# print(666,self.num)
#
# config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
# config_obj_list[1].run()
# config_obj_list[2].run() # 666 3 # #### 7 # class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# def run(self):
# self.changelist(999)
#
# class RoleConfig(StarkConfig):
#
# def changelist(self,request):
# print(666,self.num)
#
#
# class AdminSite(object):
# def __init__(self):
# self._registry = {}
#
# def register(self,k,v):
# self._registry[k] = v
#
# site = AdminSite()
# print(len(site._registry)) # 0
# site.register('range',666)
# site.register('shilei',438)
# print(len(site._registry)) # 2
#
# site.register('lyd',StarkConfig(19))
# site.register('yjl',StarkConfig(20))
# site.register('fgz',RoleConfig(33))
#
# print(len(site._registry)) # 5 # #### 8
# class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# def run(self):
# self.changelist(999)
#
# class RoleConfig(StarkConfig):
#
# def changelist(self,request):
# print(666,self.num)
#
# class AdminSite(object):
# def __init__(self):
# self._registry = {}
#
# def register(self,k,v):
# self._registry[k] = v
#
# site = AdminSite()
# site.register('lyd',StarkConfig(19))
# site.register('yjl',StarkConfig(20))
# site.register('fgz',RoleConfig(33))
# print(len(site._registry)) # 3
#
# for k,row in site._registry.items():
# row.changelist(5) ### 9
# class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# def run(self):
# self.changelist(999)
#
# class RoleConfig(StarkConfig):
#
# def changelist(self,request):
# print(666,self.num)
#
# class AdminSite(object):
# def __init__(self):
# self._registry = {}
#
# def register(self,k,v):
# self._registry[k] = v
#
# site = AdminSite()
# site.register('lyd',StarkConfig(19))
# site.register('yjl',StarkConfig(20))
# site.register('fgz',RoleConfig(33))
# print(len(site._registry)) # 3
#
# for k,row in site._registry.items():
# row.run() ## 10
#
# class UserInfo(object):
# pass
#
# class Department(object):
# pass
#
# class StarkConfig(object):
#
# def __init__(self,num):
# self.num = num
#
# def changelist(self,request):
# print(self.num,request)
#
# def run(self):
# self.changelist(999)
#
# class RoleConfig(StarkConfig):
#
# def changelist(self,request):
# print(666,self.num)
#
# class AdminSite(object):
# def __init__(self):
# self._registry = {}
#
# def register(self,k,v):
# self._registry[k] = v(k)
#
# site = AdminSite()
# site.register(UserInfo,StarkConfig)
# site.register(Department,StarkConfig)
# print(len(site._registry)) # 3
# for k,row in site._registry.items():
# row.run() # 总结:
"""
1. 对象中封装了什么?
2. self到底是谁?
"""
组合补充课上练习
二、主动调用其它类的成员
方式一、
class Base(object):
def f1(self):
print('5个功能')
class Foo(object):
def f1(self):
print('3个功能')
Base.f1(self) 执行完Foo中的方法,主动另外Base类的成员
obj = Foo()
obj.f1()
总结:
Base.实例方法(自己传self)
与继承无关
方式二:
按照类的继承顺序,找下一个,与继承有关
class Base(object):
def f1(self):
print("5个功能")
class Foo(Base):
def f1(self):
print("3个功能")
super().f1() #按照继承顺序往上找
obj = Foo()
obj.f1()
# by luffycity.com
"""""" """
class Base(object):
def f1(self):
print('5个功能') # obj = Base()
# Base.f1(obj) obj = Base()
obj.f1() """ # ########### 方式一
# class Base(object):
#
# def f1(self):
# print('5个功能')
#
# class Foo(object):
#
# def f1(self):
# print('3个功能')
# Base.f1(self)
#
# obj = Foo()
# obj.f1() # ########### 方式二:按照类的继承顺序,找下一个.
"""
class Base(object):
def f1(self):
print('5个功能') class Foo(Base):
def f1(self):
super().f1()
print('3个功能') obj = Foo()
obj.f1()
""" # ########### 方式二:按照类的继承顺序,找下一个.
class Foo(object):
def f1(self):
super().f1()
print('3个功能') class Bar(object):
def f1(self):
print('6个功能') class Info(Foo,Bar):
pass # obj = Foo()
# obj.f1() obj = Info()
obj.f1()
三、特殊成员
class Foo(object):
def __init__(self,a1,a2):
self.a1 = a1
self.a2 = a2
def __call__(self, *args, **kwargs):
print(11111,args,kwargs)
return 123
def __getitem__(self, item):
print(item)
return 8
def __setitem__(self, key, value):
print(key,value,111111111)
def __delitem__(self, key):
print(key)
def __add__(self, other):
return self.a1 + other.a2
def __enter__(self):
print('1111')
return 999
def __exit__(self, exc_type, exc_val, exc_tb):
print('22222')
1. 类名() 自动执行 __init__
# obj = Foo(1,2)
2. 对象() 自动执行 __call__
# ret = obj(6,4,2,k1=456)
3. 对象['xx'] 自动执行 __getitem__
# ret = obj['yu']
# print(ret)
4. 对象['xx'] = 11 自动执行 __setitem__
# obj['k1'] = 123
5. del 对象[xx] 自动执行 __delitem__
# del obj['uuu']
6. 对象+对象 自动执行 __add__
# obj1 = Foo(1,2)
# obj2 = Foo(88,99)
# ret = obj2 + obj1
# print(ret)
7. with 对象 自动执行 __enter__ / __exit__
# obj = Foo(1,2)
# with obj as f:
# print(f)
# print('内部代码')
8. 真正的构造方法
# class Foo(object):
# def __init__(self, a1, a2): # 初始化方法
# """
# 为空对象进行数据初始化
# :param a1:
# :param a2:
# """
# self.a1 = a1
# self.a2 = a2
#
def __new__(cls, *args, **kwargs): # 构造方法
# """
# 创建一个空对象
# :param args:
# :param kwargs:
# :return:
# """
# return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.).
#
# obj1 = Foo(1,2)
# print(obj1)
#
# obj2 = Foo(11,12)
# print(obj2)
day 24 组合的补充的更多相关文章
- [ACM_数学] Fibonacci Nim(另类取石子,2-4组合游戏)
游戏规则: 有一堆个数为n的石子,游戏双方轮流取石子,满足: 1)先手不能在第一次把所有的石子取完: 2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍). ...
- 【趣味分享】C#实现回味童年的24点算法游戏
一.24点游戏玩法规则效果展示 1.初始化界面 2.开始游戏界面 3.游戏超时界面 4.查看答案界面 5.答对界面 6.答错界面 7.计算表达式的验证界面 8.一副牌算完开始新一副牌界面 到这里24点 ...
- python编写排列组合,密码生产功能
python编写排列组合 python在编写排列组合是会用到 itertools 模块 排列 import itertools mylist = list(itertools.permutation ...
- 以太坊挖矿源码:ethash算法
本文具体分析以太坊的共识算法之一:实现了POW的以太坊共识引擎ethash. 关键字:ethash,共识算法,pow,Dagger Hashimoto,ASIC,struct{},nonce,FNV ...
- JavaScript继承的几种实现
0 什么是继承 继承就是获得存在对象已有的属性和方法的一种方式. [2019.4.26 更新]今日又重新学习了一下JS的继承,在这里整理一下以前的笔记并补充一些新的感悟. 1 JS中继承的几种实现方法 ...
- [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~
3D相关开发 [direct-X] 1.direct-X最小框架 [OpenGL] 1.环境搭建及最小系统 [OpenGL] 2.企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [ ...
- synchronized关键字,Lock接口以及可重入锁ReentrantLock
多线程环境下,必须考虑线程同步的问题,这是因为多个线程同时访问变量或者资源时会有线程争用,比如A线程读取了一个变量,B线程也读取了这个变量,然后他们同时对这个变量做了修改,写回到内存中,由于是同时做修 ...
- 【PHP基础】常用mySQL语句以及WampServer2.2设置数据库默认编码
一.WampServer2.2设置数据库默认编码(此部分转自http://www.cnsecer.com/5984.html) wamp下MySQL的默认编码是Latin1,不支持中文,要支持中文的话 ...
- 韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载)
ed2k://|file|韩顺平.循序渐进学.java.从入门到精通.第0讲-开山篇.avi|37021064|f4fb2fb3db938a642146ccc8f0935fed|h=ao2k3ep7p ...
随机推荐
- Redis(四)Jedis客户端
一.客户端通信协议 二.Java客户端Jedis 1.获取Jedis Jedis属于Java的第三方开发包,在Java中获取第三方开发包通常有两种方式: 直接下载目标版本的Jedis-${versio ...
- Mybaits 源码解析 (九)----- 全网最详细,没有之一:一级缓存和二级缓存源码分析
像Mybatis.Hibernate这样的ORM框架,封装了JDBC的大部分操作,极大的简化了我们对数据库的操作. 在实际项目中,我们发现在一个事务中查询同样的语句两次的时候,第二次没有进行数据库查询 ...
- NOIP模拟 30
补坑,很多都忘了. T1 树 像我这种人都能考场A掉当然是道水题辣 求出每条有向边的期望就好了 T2 回文串 当时毫无思路,暴力写挂. 首先把B转过来,那么都变成后缀的前缀拼起来 对于每一个LCP,他 ...
- Linux 项目 shell 自动获取报告本机IP (1) | 通过shell 自动获取报告本机IP
由于电脑设置静态IP经常出现链接不上网络,动态IP又非常不方便,故有了这个想法并实现 原理: Linux,包含PC机器,树莓派等,通过shell 自动获取报告本机IP | 通过 Mutt+Msmtp ...
- 迁移桌面程序到MS Store(11)——应用SVG图标
在传统桌面程序中,对图标的使用大多是直接嵌入JPG或者PNG的图片.在祖传的1366x768分辨率下,并没有什么问题.相对于手机硬件的突飞猛进,也侧面反映了PC行业的落寞和桌面程序开发的不思进取.用3 ...
- linux写系统服务的方法
linux写系统服务的方法 2.1 首先编写demo程序:hello.c<pre>#include <stdio.h> # chkconfig: 2345 10 90 main ...
- 学习下ElasticSearch
ElasticSearch基础概念 Elasticsearch的Head插件安装 Elasticsearch在Centos 7上的安装常见的问题 使用场景:比如分库的情况下,你想统计所有数据的报表,就 ...
- SpringBoot 2.x版本+MultipartFile设置指定文件上传大小
SpringBoot-versio:2.1.9-RELEASE 由于新版本的SpringBoot已经弃用了如下, 这种方式,提供了新的 配置方案. 这个是官方的介绍 Handling Multipar ...
- F#周报2019年第46期
新闻 使用Pulumi和.NET Core创建现代云应用 宣告.NET Core 3.1预览版3 ML.NET模型构建器升级 .NET Framework修复工具 Mac上的Visual Studio ...
- C# II: Class ViewModelBase and RelayCommand in MVVM
好久不写WPF和MVVM,新建一个Project后,想起来ViewModelBase和RelayCommand没有.以下Code摘自MSDN上的Article:Patterns - WPF Apps ...