组合补充、主动调用其他类的成员、特殊成员
一、组合补充
1.类或对象是否能做字典中的key
class Foo:passdic = {Foo:1,Foo():2 } print(dic) #{<class '__main__.Foo'>: 1, <__main__.Foo object at 0x000001BD743A8BA8>: 2} #很明显是可以做字典的key的
2.对象中到底有什么(*)
class Foo:def __init__(self,age):self.age =agedef dispaly(self):print(self.age)data_list = [Foo(8),Foo(9)] for el in data_list:print(el.age,el.dispaly()) # 8 这个8是在print语句中的el.display()执行的结果, # 8 None 这个8是print语句中el.age的值,None是el.display()没有返回值 # 9 # 9 None
3.
class StarkConfig(object):def __init__(self,num):self.num = numdef changelist(self,request):print(self.num,request)class RoleConfig(StarkConfig):def changelist(self,request):print('666') config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] for item in config_obj_list:print(item.num) #item.num其实就是StarkConfig(1).num # 1 # 2 # 3
4.
![](/assets/blank.gif)
![](/assets/blank.gif)
class StarkConfig(object):def __init__(self,num):self.num = numdef changelist(self,request):print(self.num,request)class RoleConfig(StarkConfig):passconfig_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] for item in config_obj_list:item.changelist(168) # 1 168 # 2 168 # 3 168
View Code
5.
![](/assets/blank.gif)
![](/assets/blank.gif)
class StarkConfig(object):def __init__(self,num):self.num = numdef changelist(self,request):print(self.num,request)class RoleConfig(StarkConfig):def changelist(self,request):print(666,self.num)config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)] for item in config_obj_list:item.changelist(168) # 1 168 # 2 168 # 666 3
View Code
6.
![](/assets/blank.gif)
![](/assets/blank.gif)
class StarkConfig(object):def __init__(self,num):self.num = numdef 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() # 2 999 # 666 3
View Code
7.
![](/assets/blank.gif)
![](/assets/blank.gif)
class StarkConfig(object):def __init__(self,num):self.num = numdef 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] = vsite = 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
View Code
8.
![](/assets/blank.gif)
![](/assets/blank.gif)
class StarkConfig(object):def __init__(self,num):self.num = numdef 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] = vsite = AdminSite() site.register('lyd',StarkConfig(19)) site.register('yjl',StarkConfig(20)) site.register('fgz',RoleConfig(33)) print(len(site._registry)) # 3for k,row in site._registry.items():row.changelist(5) # 19 5 # 20 5 # 666 33
View Code
9.
![](/assets/blank.gif)
![](/assets/blank.gif)
class StarkConfig(object):def __init__(self,num):self.num = numdef 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] = vsite = AdminSite() site.register('lyd',StarkConfig(19)) site.register('yjl',StarkConfig(20)) site.register('fgz',RoleConfig(33)) print(len(site._registry)) # 3for k,row in site._registry.items():row.run() # 19 999 # 20 999 # 666 33
View Code
10.
![](/assets/blank.gif)
![](/assets/blank.gif)
class UserInfo(object):passclass Department(object):passclass StarkConfig(object):def __init__(self,num):self.num = numdef 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) for k,row in site._registry.items():row.run() # <class '__main__.UserInfo'> 999 # <class '__main__.Department'> 999
View Code
总结:
1.要知道对象中封装了什么
2.self到底是谁
二、主动调用其他类的成员
class Base(object):def f1(self):print("asd") obj = Base() #我们在调用类中的方法时,一般都是先创建一个对象,然后用对象名.方法名就可以调用 obj.f1()obj = Base() Base.f1(obj) #用类名也可以调用类中的方法,但是方法中的self必须手动传入
方式一:
class Base(object):def f1(self):print("asd")class Foo(Base):def f1(self):print("qwe")Base.f1(self) obj = Foo() obj.f1() # qwe # asd
方式二、 按照类的继承顺序,找下一个
class Base(object):def f1(self):print("asd")class Foo(Base):def f1(self):print("qwe")super().f1() obj = Foo() obj.f1() # qwe # asd
class Bar(object):def f1(self):print("asd")class Foo(object):def f1(self):print("qwe")super().f1() #这里的self是App,按照App继承顺序的下一个是Bar所以调用了Bar中的f1方法class App(Foo,Bar):passobj = App() obj.f1() # qwe # asd
三、特殊成员
![](/assets/blank.gif)
![](/assets/blank.gif)
class Foo(object):def __init__(self,a1,a2):self.a1 = a1self.a2 = a2def __call__(self, *args, **kwargs):print(111,args,kwargs)return 123def __getitem__(self, item):print(item)return 11def __setitem__(self, key, value): #没有返回值print(key,value,1111)def __delitem__(self, key): #没有返回值print(key)def __add__(self, other):print(other)return self.a1 + other.a2def __enter__(self):print(111)return 999def __exit__(self, exc_type, exc_val, exc_tb):return 222 #1 类名() 自动执行__init__ # obj = Foo(1,2) #2 对象() 自动执行__call__ # obj = Foo(1,2) # ret = obj(1,2,3,4,k1="123") #111 (1, 2, 3, 4) {'k1': '123'} # print(ret) #123 #3 对象["xx"] 自动执行__getitem__ # obj = Foo(1,2) # ret = obj["aa"] #aa # print(ret) #11 #4 对象["xx"]=xx 自动执行__setitem__ # obj = Foo(1,2) # obj["k1"] = "v1" #k1 v1 1111 #5 del 对象["xx"] 自动执行__delitem__ # obj = Foo(1,2) # del obj["k1"] #k1 #6 对象+对象 自动执行__add__ # obj1 = Foo(1,2) # obj2 = Foo(88,99) # ret = obj1+obj2 #<__main__.Foo object at 0x0000020F3B08E400> # print(ret) #100 #7 with 对象 自动执行__enter__/__exit__ # obj = Foo(1,2) # with obj as f: # print(f) # # 111 # # 999 # 8 真正的构造方法 class Foo(object):def __init__(self, a1, a2): # 初始化方法"""为空对象进行数据初始化:param a1::param a2:"""self.a1 = a1self.a2 = a2def __new__(cls, *args, **kwargs): # 构造方法"""创建一个空对象:param args::param kwargs::return:"""return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.). obj1 = Foo(1,2) print(obj1) #<__main__.Foo object at 0x0000024D96198DD8> obj2 = Foo(11,12) print(obj2) #<__main__.Foo object at 0x0000024D96198DA0>
View Code
转载于:https://www.cnblogs.com/qq849784670/p/9555454.html
组合补充、主动调用其他类的成员、特殊成员相关推荐
- 十二. python面向对象主动调用其他类
一 .python面向对象主动调用其他类成员 (看代码) 主动调用 其他类的成员# 没有继承 的主动调用 class Grad(object):bar=555555def __init__(self, ...
- java在dog中定义name变量,组合构造 冯跃峰 java中组合的应用(不相干的类共同完成一个功能)+构造器回顾...
java中组合的应用(不相干的类共同完成一个功能)+构造器回顾:今天我们了解到java的组合.可以说java组合是非常的重要的.可以对类进行封装,将底层的内容封装起来.甚至于java的继承都没有其重要 ...
- 【Kotlin】Kotlin enum 枚举类 ( 常用用法 | 初始化成员变量 | 实现抽象方法 | 实现接口 | 获取名称和位置索引 | 调用枚举常量方法 )
文章目录 I . 枚举类常用用法 II . 枚举类初始化 III. 枚举类匿名类 IV . 枚举类实现接口 V . 获取枚举常量名称和位置索引 VI . 获取枚举常量的成员变量 VII . 调用枚举常 ...
- 习题 11.10 将本章11.8节中的程序片段加以补充完善,成为一个完整的程序。在程序中使用继承和组合。在定义Professor类对象prof1时给出所有数据的初值,然后修改prof1的生日数据。。。
C++程序设计(第三版) 谭浩强 习题11.10 个人设计 习题 11.10 将本章11.8节中的程序片段加以补充完善,成为一个完整的程序.在程序中使用继承和组合.在定义Professor类对象pro ...
- C++主动调用析构函数分析
1. 关于主动调用析构函数: C++编程规范中都不支持显示的调用析构函数,部分文章中甚至说明析构函数是不能显示调用的,然而执行如下类似的操作编译器并不会报错,而且会调用成功. pa->~A() ...
- 类与类之间的关系:依赖关系和关联关系及继承关系中self是什么? 类里面的特殊成员...
类与类之间的关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进行归 类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 中存在 ...
- C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)
1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...
- java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
摘要:这篇JavaScript栏目下的"Javascript类定义语法,私有成员.受保护成员.静态成员等介绍",介绍的技术点是"javascript类.JavaScrip ...
- C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员
一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...
最新文章
- 2.View绘制分析笔记之onMeasure
- 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
- 5训练需要更改参数吗_这就是需要的瘦肚子训练,5个杠铃片腹肌训练动作暴汗燃脂瘦腰腹...
- java getSource()和 getActionCommand()
- Python即Python解释器的发展史
- 感受冬日和煦的春风。。。
- Android Kotlin Exception处理
- 工业交换机的日常维护保养该怎么做?
- python gevent async_python的异步初体验(gevent、async、await)
- 运营商市场经营方向及趋势
- 【升职加薪必备架构图】Springboot学习路线汇总
- J-link J-flash 工程配置及下载
- Viterbi算法(维特比算法)
- excel 链接批量转图片
- Typora下载加速
- Atomic的介绍和使用(原子变量)
- 显性测试数据全对的WA之uva355(已AC)
- LTE语音业务-VOLTE(一)
- 微信iOS长按无法识别二维码
- 手机电商营销模式探讨
热门文章
- no matching manifest for windows/amd64 10.0.18362 in the manifest list entries.
- 【Speaking】Task3 综合口语 做题技巧
- k8s部署-20-k8s的服务发现原理,k8s有几种服务发现规则
- 7s\/7s Plus\/8前后面板曝光 外形就这样了?
- Ubuntu系统文件只读权限修改
- 0-2岁儿童早期教育计划
- 奥浦迈生物通过注册:半年营收1.47亿 国寿成达与达晨是股东
- python月亮_如何用python代码画一个月亮
- Mysql 学生信息经典50题
- qpython3h教程_python写的测试框架怎么使用:python qqbot使用教程