摘要:
十八. 上下文管理协议 __enter__ 和 __exit__ 1.什么是上下文管理协议 上下文管理协议就是 with 语句, 为了让一个对象兼容with语句,必须在这个对象的类中声明__enter__()和__exit__()方法 with 对象,触发对象的__enter__的执行 在with同 阅读全文
摘要:
十七. __eq__ 触发条件 : 在两个对象进行 == 比较值的时候触发 __eq__() 的执行, 在该方法内部可以自定义比较规则 print(12 == [1,2,3]) # False print("w" == (2,3,5,)) # False l1 = [1,2,3] l2 = [1,2 阅读全文
摘要:
十六. __hash__ 触发条件 : 使用 hash([对象]) 函数的时候触发, 里面返回什么值就是什么值, 返回值必须是整数 class Str: def __hash__(self): return 1231 # 只能返回整数, 不然报错 : "TypeError" 类型错 p = Str( 阅读全文
摘要:
十五. __len__ 计算对象的长度, return 是多少, len([对象]) 的结果就是多少 触发条件 : 使用 len([对象]) 时触发, 返回值必须为整数 🐞"return"多少就是多少 class Person: def __len__(self): return 11111 # 阅读全文
摘要:
补充链式调用知识 链式调用是设计程序的模式, 在Java 和 js 中被广泛应用 链式调用格式 : A.方法.方法.方法.方法 优势和好处 : 代码量大大减少, 逻辑集中清晰明了, 且易于查看和修改 class Person: def __init__(self,name,age,sex): sel 阅读全文
摘要:
十四. __iter__ 和 __next__ 前面迭代器那一章节我们讲解了可迭代对象和迭代器对象的特点以及 For 循环的原理 : 可迭代对象 (iterable) : 在python中,但凡内置有 __iter__方法的对象,都是可迭代的对象 迭代器对象 (iterator) : 内置有__ne 阅读全文
摘要:
十三. __all__ 前面模块介绍章节其实已经介绍过了 __all__ 的使用, 它用来在使用 from [模块名] import * 的时候, 针对这个 * 来限制能够使用的属性 🐞文件 "test.py" 内容 __all__ = ["Foo","Bar"] # 如此只能使用 Foo,Bar 阅读全文
摘要:
十二. __slots__ 和 __dict__ 1.__slots__ 默认我们可以给class实例绑定任何属性和方法,这就是动态语言的灵活性如果我们想要限制class的属性怎么办?比如,只允许对Persion实例添加name和age属性。为了达到限制的目的,Python允许在定义class的时候 阅读全文
摘要:
十一. __module__ 和 __class__ 1.__module__ 可以查看当前操作的对象在哪个模块 🐞文件 "test.py" 内容 class Foo: def __init__(self,name): self.name = name 🐞当前执行文件内容 from test i 阅读全文
摘要:
十. __str__ 和 __repr__ 1.__str__ 触发条件 : print([对象]) 的时候触发 __str__ 的执行 class Person: def __init__(self,name): self.name = name def __str__(self): print( 阅读全文
摘要:
九. __init__ 和 __new__ 1.先看代码 : class Person: def __init__(self,name): print("触发__init__") self.name = name def __new__(cls, *args, **kwargs): print("触 阅读全文
摘要:
八. __call__ 触发条件 : [对象] + ( ) 就触发 __call__ 的执行 class Person: def __init__(self,name): self.name = name def __call__(self, *args, **kwargs): print(args 阅读全文