首页 > 其他 > 详细

魔术方法--?

时间:2019-08-31 12:12:58      阅读:57      评论:0      收藏:0      [点我收藏+]

方法:

  1 # -*- coding:utf-8 -*-
  2 # 1.__doc__  表示类的描述信息
  3 class Foo(object):
  4     """ 描述类信息1234 """
  5     def func(self):
  6         pass
  7 print(Foo.__doc__)  # 描述类信息1234
  8 
  9 # 2.__module__  表示当前操作的对象在那个模块
 10 #   __class__  表示当前操作的对象的类是什么
 11 from test import Person
 12 
 13 obj = Person()
 14 print(obj.__module__)  # 输出test  模块名
 15 print(obj.__class__)  # 输出Person 类名
 16 
 17 # 3.__init__  初始化方法,通过类创建对象时,自动触发执行  和__new__一起组成构造方法
 18 class Person(object):
 19     def __init__(self,name):
 20         self.name = name
 21         self.age = 18
 22 
 23 obj = Person("小明")  # 自动执行类里面的__init__方法
 24 
 25 # 4.__del__  当对象被销毁(即在内存中被释放)的时候,自动触发执行
 26 # 注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。
 27 class Foo(object):
 28     def __del__(self):
 29         pass
 30 
 31 # 5.__call__ 实例化对象后面加括号,直接出发执行
 32 class Foo(object):
 33     def __init__(self):
 34         pass
 35 
 36     def __call__(self, *args, **kwargs):
 37         print(__call__)
 38 
 39 
 40 obj = Foo()  # 执行 __init__
 41 obj()  # 执行 __call__
 42 
 43 # 6.__dict__  查看类或对象中所有的属性
 44 class Province(object):
 45     country = "中国"
 46 
 47     def __init__(self,name,count):
 48         self.name = name
 49         self.count = count
 50 
 51     def func(self,*args,**kwargs):
 52         print("func")
 53 
 54 print(Province.__dict__)
 55 #输出类的属性和方法:{‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Province‘ objects>, ‘__module__‘: ‘__main__‘, ‘country‘: ‘中国‘, ‘func‘: <function Province.func at 0x0000019BB5280400>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Province‘ objects>, ‘__init__‘: <function Province.__init__ at 0x0000019BB5280598>, ‘__doc__‘: None}
 56 obj = Province("山东",100)
 57 print(obj.__dict__)  # 输出实例化对象的属性: {‘count‘: 100, ‘name‘: ‘山东‘}
 58 
 59 # 7.__str__  如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值 如果没有这个方法 输出的是对象的地址
 60 class Foo(object):
 61     def __str__(self):
 62         return "---Foo---"
 63 
 64 class Foo2(object):
 65     pass
 66 
 67 obj1 = Foo()
 68 obj2 = Foo2()
 69 print(obj1)  # 输出: ---Foo---
 70 print(obj2)  # 输出: <__main__.Foo2 object at 0x000001907FEC75F8>
 71 
 72 # 8.__getitem__、__setitem__、__delitem__
 73 # 用于索引操作,如字典。以上分别表示获取、设置、删除数据
 74 class Foo(object):
 75     def __setitem__(self, key, value):
 76         self.key = key
 77         self.value = value
 78         print("设置完毕")
 79 
 80     def __getitem__(self, key):
 81         print("key:%s--->value:%s" % (key,self.value))
 82 
 83     def __delitem__(self, key):
 84         del key
 85 
 86 obj = Foo()
 87 obj["k1"] = 100  # 自动触发执行 __setitem__ 输出:设置完毕
 88 print(obj["k1"])  # 自动触发执行 __getitem__ 输出:key:k1--->value:100
 89 del obj["k1"]  # 自动触发执行 __delitem__ 输出:None
 90 print(obj["k1"]) # 输出:key:k1--->value:100 ?? 怎么删除了还能输出这个 没理解
 91                         # None
 92 
 93 # 9.__getslice__、__setslice__、__delslice__
 94 # 该三个方法用于分片操作,如:列表
 95 # 注:此方法只能在python2.x中使用,python3.x中报错 也必须要有utf-8的编码格式
 96 # -*- coding:utf-8 -*-
 97 class Foo(object):
 98     save_list = [1,2,3,4,5,6]
 99     def __getslice__(self, i, j):
100         print(__getslice__)
101         return self.save_list[i:j]
102 
103     def __setslice__(self, i, j, sequence):
104         print(__setslice__)
105         self.save_list[i:j] = sequence
106         print(self.save_list)
107 
108     def __delslice__(self, i, j):
109         print(__delslice__)
110         del self.save_list[i:j]
111         print(self.save_list)
112 
113 obj = Foo()
114 result = obj[0:3]  # 自动触发执行 __getslice__ 输出:__getslice__
115 print(result)  # 输出: [1, 2, 3]
116 obj[0:1] = [11,22,33,44]    # 自动触发执行 __setslice__ 输出:__setslice__
117                                                         # [11, 22, 33, 44, 2, 3, 4, 5, 6]
118 del obj[0:2]                # 自动触发执行 __delslice__ 输出:__delslice__
119                                                         # [33, 44, 2, 3, 4, 5, 6]

 

魔术方法--?

原文:https://www.cnblogs.com/yifengs/p/11438339.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!