探索Python中双下划线的特殊方法属性魔法世界

 更新时间:2023年11月12日 10:35:21   作者:涛哥聊Python  
这篇文章主要为大家介绍了Python中双下划线的特殊方法属性魔法世界探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

特殊方法(Magic Methods)

Python中的特殊方法和属性,我们可以了解到这些功能是如何为自定义类和对象提供强大的控制和自定义选项的。

这些特殊方法和属性具有特定的名称和用途,以双下划线__开头和结尾。它们允许覆盖默认行为,从而实现更灵活的对象交互和自定义类的行为。

1. __init__(self, ...): 构造方法

__init__是在创建新对象时首先调用的方法。用于初始化对象的属性和执行任何必要的设置。通常会在自定义类中定义的第一个方法。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

2. __str__(self): 字符串表示

__str__方法定义了对象的字符串表示。使用str(obj)或print(obj)时,将调用此方法。

class Person:
    def __str__(self):
        return f"{self.name}, {self.age} years old"

3. __repr__(self): 官方字符串表示

__repr__方法返回对象的"官方"字符串表示,通常是一个可以用来重新创建该对象的表达式。它对于调试和开发非常有用。

class Person:
    def __repr__(self):
        return f"Person('{self.name}', {self.age})"

4. __len__(self): 长度

__len__方法定义了对象的长度,可以通过len(obj)来调用。

class MyList:
    def __init__(self, items):
        self.items = items

    def __len__(self):
        return len(self.items)

5. __getitem__(self, key): 获取元素

__getitem__方法用于通过键或索引访问对象的元素,可通过obj[key]来调用。

class MyList:
    def __getitem__(self, index):
        return self.items[index]

6. __setitem__(self, key, value): 设置元素

__setitem__方法允许您通过键或索引设置对象的元素,可通过obj[key] = value来调用。

class MyList:
    def __setitem__(self, index, value):
        self.items[index] = value

7. __delitem__(self, key): 删除元素

__delitem__方法定义了删除对象元素的操作,可通过del obj[key]来调用。

class MyList:
    def __delitem__(self, index):
        del self.items[index]

8. __iter__(self): 迭代器

__iter__方法返回一个可迭代对象,通常与__next__方法一起使用,实现对象的迭代。

class MyList:
    def __iter__(self):
        self.index = 0
        return self

    def __next__(self):
        if self.index < len(self.items):
            result = self.items[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration

9. __next__(self): 下一个迭代值

__next__方法用于返回迭代器的下一个值,通常与__iter__方法一起使用,可在循环中调用。

10. __contains__(self, item): 包含性检查

__contains__方法用于判断对象是否包含某个元素,可通过item in obj来调用。

class MyList:
    def __contains__(self, item):
        return item in self.items

11. __eq__(self, other): 相等性比较

__eq__方法定义了对象的相等性比较,可通过obj == other来调用。

class Point:
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

12. __ne__(self, other): 不相等性比较

__ne__方法定义了对象的不相等性比较,可通过obj != other来调用。

13. __lt__(self, other): 小于比较

__lt__方法定义了对象的小于比较,可通过obj < other来调用。

14. __le__(self, other): 小于等于比较

__le__方法定义了对象的小于等于比较,可通过obj <= other来调用。

15. __gt__(self, other): 大于比较

__gt__方法定义了对象的大于比较,可通过obj > other来调用。

16. __ge__(self, other): 大于等于比较

__ge__方法定义了对象的大于等于比较,可通过obj >= other来调用。

这些特殊方法允许自定义类的行为,使其能够按照需求进行构建和交互。通过覆盖这些方法,可以实现更高级的功能,例如自定义容器类、实现迭代器、支持比较操作等。

特殊属性(Magic Attributes)

1. __doc__: 文档字符串

__doc__属性包含类或函数的文档字符串,可以通过obj.__doc__来访问。这对于文档和注释非常有用。

class MyClass:
    """这是我的类的文档字符串。"""

print(MyClass.__doc__)

2. __class__: 类

__class__属性包含对象所属的类,可以通过obj.__class__来访问。

class MyClass:
    pass

obj = MyClass()
print(obj.__class__)

3. __name__: 模块

名称

__name__属性包含模块的名称,对于模块级别的代码有用。

if __name__ == "__main__":
    print("This code is executed only when the script is run directly.")

4. __file__: 模块文件路径

__file__属性包含模块的文件路径,对于模块级别的代码有用。

print(__file__)

5. __dict__: 属性字典

__dict__属性包含对象的属性和方法的字典。可以动态地添加、修改或删除对象的属性。

class Person:
    pass
person = Person()
person.name = "Alice"
person.age = 30
print(person.__dict__)

6. __dir__(): 属性和方法列表

__dir__()方法返回对象的属性和方法的列表,可以通过dir(obj)来调用。这对于查看对象的可用成员非常有用。

class MyClass:
    def my_method(self):
        pass
print(dir(MyClass()))

7. __slots__: 属性限制

__slots__属性允许限制类的属性,使其只能包含指定的属性,从而节省内存。这在需要创建大量对象时很有用。

class MyObject:
    __slots__ = ('name', 'age')

obj = MyObject()
obj.name = "Alice"
obj.age = 30
obj.address = "123 Main St."  # 会引发异常,因为'address'不在__slots__中

8. __bases__: 直接父类元组

__bases__属性包含类的直接父类的元组,通常在类继承和多重继承时使用。

class Parent1:
    pass
class Parent2:
    pass
class Child(Parent1, Parent2):
    pass
print(Child.__bases__)  # 输出 (<class '__main__.Parent1'>, <class '__main__.Parent2'>)

9. __subclasses__(): 子类列表

__subclasses__()方法返回类的所有直接子类,通常与issubclass()函数一起使用。

class Parent:
    pass
class Child1(Parent):
    pass
class Child2(Parent):
    pass
print(Parent.__subclasses__())  # 输出 [<class '__main__.Child1'>, <class '__main__.Child2'>]

10. __mro__: 方法解析顺序

__mro__属性包含类的方法解析顺序元组(Method Resolution Order),通常在多重继承中查找方法时使用。

class A:
    def foo(self):
        pass
class B(A):
    def foo(self):
        pass
class C(A):
    def foo(self):
        pass
class D(B, C):
    pass
print(D.__mro__)  # 输出 (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

总结

特殊方法和属性是Python中强大而灵活的工具,用于自定义类和对象的行为。

通过使用这些特殊方法和属性,可以实现自定义的构造函数、字符串表示、比较操作、迭代器等功能。特殊属性则能够访问与类和模块相关的元数据信息。

理解并灵活运用这些特殊方法和属性能够更好地定制和控制Python代码,使其适应各种需求和场景。

以上就是探索Python中双下划线的特殊方法属性魔法世界的详细内容,更多关于Python双下划线方法属性的资料请关注脚本之家其它相关文章!

相关文章

  • Python WEB应用部署的实现方法

    Python WEB应用部署的实现方法

    这篇文章主要介绍了Python WEB应用部署的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Python做简单的字符串匹配详解

    Python做简单的字符串匹配详解

    这篇文章主要介绍了Python做简单的字符串匹配详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • python中opencv Canny边缘检测

    python中opencv Canny边缘检测

    这篇文章主要介绍了python中opencv Canny边缘检测,Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。OpenCV提供了函数cv2.Canny()实现Canny边缘检测。更多相关内容需要的小伙伴可以参考下面文章内容
    2022-06-06
  • Pytorch训练网络过程中loss突然变为0的解决方案

    Pytorch训练网络过程中loss突然变为0的解决方案

    这篇文章主要介绍了Pytorch训练网络过程中loss突然变为0的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 在Python中操作时间之mktime()方法的使用教程

    在Python中操作时间之mktime()方法的使用教程

    这篇文章主要介绍了在Python中操作时间之mktime()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python是编译运行的验证方法

    Python是编译运行的验证方法

    这篇文章主要介绍了Python是编译运行的验证方法,本文讲解了一个小方法来验证Python是编译运行还是解释运行,需要的朋友可以参考下
    2015-01-01
  • Django发送邮件功能实例详解

    Django发送邮件功能实例详解

    在本篇文章里小编给大家整理了关于Django发送邮件功能的详细内容,有需要的朋友们可以参考学习下。
    2019-09-09
  • 使用Python实现企业微信通知功能案例分析

    使用Python实现企业微信通知功能案例分析

    这篇文章主要介绍了使用Python实现企业微信通知功能,主要目的是通过企业微信应用给企业成员发消息,通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 使用Python导出Excel图表以及导出为图片的方法

    使用Python导出Excel图表以及导出为图片的方法

    这篇文章主要介绍了使用Python导出Excel图表以及导出为图片的方法,Python相关模块在Windows下操作office非常方便,需要的朋友可以参考下
    2015-11-11
  • Pywinauto基础教程之控件操作

    Pywinauto基础教程之控件操作

    这篇文章主要给大家介绍了关于Pywinauto基础教程之控件操作的相关资料,pywinauto库是一个用于在Windows上自动化操作的库,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论