一、组合补充

  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.

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.

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.

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.

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.

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.

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.

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

三、特殊成员

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

组合补充、主动调用其他类的成员、特殊成员相关推荐

  1. 十二. python面向对象主动调用其他类

    一 .python面向对象主动调用其他类成员 (看代码) 主动调用 其他类的成员# 没有继承 的主动调用 class Grad(object):bar=555555def __init__(self, ...

  2. java在dog中定义name变量,组合构造 冯跃峰 java中组合的应用(不相干的类共同完成一个功能)+构造器回顾...

    java中组合的应用(不相干的类共同完成一个功能)+构造器回顾:今天我们了解到java的组合.可以说java组合是非常的重要的.可以对类进行封装,将底层的内容封装起来.甚至于java的继承都没有其重要 ...

  3. 【Kotlin】Kotlin enum 枚举类 ( 常用用法 | 初始化成员变量 | 实现抽象方法 | 实现接口 | 获取名称和位置索引 | 调用枚举常量方法 )

    文章目录 I . 枚举类常用用法 II . 枚举类初始化 III. 枚举类匿名类 IV . 枚举类实现接口 V . 获取枚举常量名称和位置索引 VI . 获取枚举常量的成员变量 VII . 调用枚举常 ...

  4. 习题 11.10 将本章11.8节中的程序片段加以补充完善,成为一个完整的程序。在程序中使用继承和组合。在定义Professor类对象prof1时给出所有数据的初值,然后修改prof1的生日数据。。。

    C++程序设计(第三版) 谭浩强 习题11.10 个人设计 习题 11.10 将本章11.8节中的程序片段加以补充完善,成为一个完整的程序.在程序中使用继承和组合.在定义Professor类对象pro ...

  5. C++主动调用析构函数分析

    1.  关于主动调用析构函数: C++编程规范中都不支持显示的调用析构函数,部分文章中甚至说明析构函数是不能显示调用的,然而执行如下类似的操作编译器并不会报错,而且会调用成功. pa->~A() ...

  6. 类与类之间的关系:依赖关系和关联关系及继承关系中self是什么? 类里面的特殊成员...

    类与类之间的关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进行归 类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 中存在 ...

  7. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  8. java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...

    摘要:这篇JavaScript栏目下的"Javascript类定义语法,私有成员.受保护成员.静态成员等介绍",介绍的技术点是"javascript类.JavaScrip ...

  9. C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员

    一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...

最新文章

  1. 2.View绘制分析笔记之onMeasure
  2. 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
  3. 5训练需要更改参数吗_这就是需要的瘦肚子训练,5个杠铃片腹肌训练动作暴汗燃脂瘦腰腹...
  4. java getSource()和 getActionCommand()
  5. Python即Python解释器的发展史
  6. 感受冬日和煦的春风。。。
  7. Android Kotlin Exception处理
  8. 工业交换机的日常维护保养该怎么做?
  9. python gevent async_python的异步初体验(gevent、async、await)
  10. 运营商市场经营方向及趋势
  11. 【升职加薪必备架构图】Springboot学习路线汇总
  12. J-link J-flash 工程配置及下载
  13. Viterbi算法(维特比算法)
  14. excel 链接批量转图片
  15. Typora下载加速
  16. Atomic的介绍和使用(原子变量)
  17. 显性测试数据全对的WA之uva355(已AC)
  18. LTE语音业务-VOLTE(一)
  19. 微信iOS长按无法识别二维码
  20. 手机电商营销模式探讨

热门文章

  1. no matching manifest for windows/amd64 10.0.18362 in the manifest list entries.
  2. 【Speaking】Task3 综合口语 做题技巧
  3. k8s部署-20-k8s的服务发现原理,k8s有几种服务发现规则
  4. 7s\/7s Plus\/8前后面板曝光 外形就这样了?
  5. Ubuntu系统文件只读权限修改
  6. 0-2岁儿童早期教育计划
  7. 奥浦迈生物通过注册:半年营收1.47亿 国寿成达与达晨是股东
  8. python月亮_如何用python代码画一个月亮
  9. Mysql 学生信息经典50题
  10. qpython3h教程_python写的测试框架怎么使用:python qqbot使用教程