首页 > 编程语言 >python中针对类本身的方法

python中针对类本身的方法

时间:2025-01-21 12:09:32浏览次数:1  
标签:__ 针对 obj python self 本身 .__ MyClass class

当你提到 __getattribute__ 时,它是 Python 中一个特殊的方法,用于访问对象的属性。重载该方法可以控制访问实例属性的行为。在 Python 中,__getattribute__ 是所有属性访问的基础方法,每次你访问对象的属性时,都会调用它。除了 __class____mro____dict__ 等方法之外,__getattribute__ 也与类密切相关,特别是在重载该方法时,它可以通过类来定制属性访问。

1. __getattribute__

  • 作用:重载该方法以定制属性访问的行为。它会在你访问对象的任何属性时被自动调用。此方法接收两个参数:selfname(属性的名称)。
  • 用法self.__class__.__getattribute__(self, 'attr_name') 通过类来获取对象的属性。如果你重载 __getattribute__,会影响所有属性访问行为。
  • 示例
    class MyClass:
        def __init__(self, value):
            self.value = value
    
        def __getattribute__(self, name):
            print(f"Getting attribute: {name}")
            return super().__getattribute__(name)  # 调用父类的 __getattribute__
    
    obj = MyClass(10)
    print(obj.value)
    # 输出:
    # Getting attribute: value
    # 10
    

2. __class__

  • 作用:指向对象的类。
  • 用法self.__class__ 返回当前对象所属的类。
  • 示例
    class MyClass:
        pass
    
    obj = MyClass()
    print(obj.__class__)  # 输出: <class '__main__.MyClass'>
    

3. __mro__ (Method Resolution Order)

  • 作用:获取当前类的继承顺序(类的层次结构)。返回一个元组,元组中的元素是类,从当前类到 object 类。
  • 用法self.__class__.__mro__ 返回继承顺序。
  • 示例
    class A:
        pass
    
    class B(A):
        pass
    
    class C(B):
        pass
    
    obj = C()
    print(obj.__class__.__mro__)
    # 输出: [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
    

4. __dict__

  • 作用:获取当前类或对象的属性字典,包含类或对象的所有属性(包括方法)。
  • 用法self.__class__.__dict__ 可以查看类定义中的所有属性和方法。
  • 示例
    class MyClass:
        x = 10
        def method(self):
            return self.x
    
    obj = MyClass()
    print(obj.__class__.__dict__)  # 输出类中的属性和方法
    

5. __name__

  • 作用:获取类的名称。通常通过 self.__class__.__name__ 来获取类的名字。
  • 用法self.__class__.__name__ 返回类的名称(字符串)。
  • 示例
    class MyClass:
        pass
    
    obj = MyClass()
    print(obj.__class__.__name__)  # 输出: 'MyClass'
    

6. __base__

  • 作用:获取当前类的父类(基类)。如果没有父类则返回 object
  • 用法self.__class__.__base__ 返回父类。
  • 示例
    class A:
        pass
    
    class B(A):
        pass
    
    obj = B()
    print(obj.__class__.__base__)  # 输出: <class '__main__.A'>
    

7. super()

  • 作用:返回当前类的父类(或者更上层的类)的实例,通常用于调用父类的方法。
  • 用法super() 用于多重继承中访问父类方法。
  • 示例
    class A:
        def speak(self):
            print("A speaking")
    
    class B(A):
        def speak(self):
            super().speak()  # 调用父类的 speak 方法
            print("B speaking")
    
    obj = B()
    obj.speak()
    # 输出:
    # A speaking
    # B speaking
    

8. __init____new__

  • 作用__init__ 是类的构造函数,负责初始化新创建的实例;__new__ 是类的构造方法,负责创建实例对象。
  • 用法__init__ 在实例化时调用,__new__ 用于控制对象的创建过程,通常在元类或单例模式中使用。
  • 示例
    class MyClass:
        def __init__(self, name):
            self.name = name
    
        def __new__(cls):
            print("Creating instance")
            return super().__new__(cls)
    
    obj = MyClass("Test")
    print(obj.name)  # 输出: Test
    

9. __del__

  • 作用:析构函数,当对象被销毁时调用。主要用于释放资源(例如文件、网络连接等)。
  • 用法__del__ 是类的一个特殊方法,用于清理资源。
  • 示例
    class MyClass:
        def __del__(self):
            print(f'{self} is being destroyed.')
    
    obj = MyClass()
    del obj  # 输出: <__main__.MyClass object at ...> is being destroyed.
    

10. __call__

  • 作用:使得类的实例像函数一样可调用。当类的实例被调用时,__call__ 方法会被触发。
  • 用法self.__class__.__call__(self, ...) 使得对象能够像函数一样被调用。
  • 示例
    class MyClass:
        def __call__(self, x):
            return x * 2
    
    obj = MyClass()
    print(obj(5))  # 输出: 10
    

11. __slots__

  • 作用:限定类实例只能有特定的属性。通过 __slots__,可以避免为实例动态创建属性字典,从而节省内存。
  • 用法self.__class__.__slots__ 用于定义哪些属性可以在对象上使用。
  • 示例
    class MyClass:
        __slots__ = ['x', 'y']
    
    obj = MyClass()
    obj.x = 10
    obj.y = 20
    # obj.z = 30  # 会抛出 AttributeError,因为没有 z 属性
    

总结

这些方法和属性都与类和对象相关,它们有助于你访问类的元数据、控制类的行为、优化内存使用、以及管理类的继承关系。通过这些方法,你可以更灵活地管理和控制类及其对象的生命周期和行为,特别是当涉及到继承、属性访问控制、资源管理时。

标签:__,针对,obj,python,self,本身,.__,MyClass,class
From: https://www.cnblogs.com/lmc7/p/18683392

相关文章

  • Python 常用运维模块之OS模块篇
    Python常用运维模块之OS模块篇OS模块获取当前工作目录更改当前工作目录返回当前目录路径返回上一级目录路径递归生成目录路径删除目录创建目录删除目录列出特定目录下文件和子目录删除某个特定文件重命名某个文件获取某个文件/目录的信息输出目录路径分隔符输出文件行......
  • Python方法重写与扩展
    Python方法重写与扩展在面向对象编程中,方法重写和方法扩展是两个非常重要的概念,它们使得派生类可以根据需要对基类的方法进行修改或增强。通过方法重写,派生类能够替代基类中已有的方法,而方法扩展则允许派生类在基类方法的基础上,增加新的功能或对方法进行额外的操作。方法......
  • windows上开防火墙针对端口限制能访问的ip
    背景客户环境是windowsserver2016的服务器,需要把windows上的防火墙用起来。启动的每一个服务端口都要列出对应的ip来访问,俗称控制访问,ip白名单。两种方法1.使用PowerShell命令行配置New-NetFirewallRule-DisplayName"AllowTCP8088fromSpecificIPs"`......
  • Python MQTT服务器
    pythonmqttserver是一个流行的开源工具,用于在分布式系统中实现消息传递。通过使用Python编写MQTT服务器,用户可以轻松地实现自己的消息传递系统。下面是对PythonMQTT服务器的简要解读和分析。一、PythonMQTT服务器的工作原理PythonMQTT服务器使用Python语言编写的,采用MQTT协......
  • python安装、vscode安装、conda安装:一文搞定Python的开发环境(史上最全)
    本文原文链接文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完......
  • python 利用探空数据识别整层云
    选用蔡淼的论文:[1]蔡淼,欧建军,周毓荃,等.L波段探空判别云区方法的研究[J].大气科学,2014,38(02):213-222.里面的阈值法: #!/usr/bin/python3#-*-coding:utf-8-*-"""@Time:2025/1/2023:22@Author:Suyue@Email:1493117872@qq.com@File:cloud_area.py@Proj......
  • python转转商超书籍信息爬虫
    1基本理论1.1概念体系        网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以按照我们设置的规则自动化爬取网络上的信息,这些规则被称为爬虫算法。是一种自动化程序,用于从互联网上抓取数据。爬虫通过模拟浏览器的行为,访问网页并提取信息。这些信息可以是结构化的......
  • 【Python项目实战】爬取中国天气网天气数据
    1.引言在日常生活中,我们经常需要获取实时的天气数据。中国天气网www.weather.com.cn提供了较为丰富的天气数据资源,同时爬取不设过多限制,对新手友好。代码资源:https://download.csdn.net/download/weixin_74773078/90274520(有个性化程序定制需求可私信作者)2.准备工作在开......
  • python 数据清洗
    数据清洗,清洗“RHU”列为999999的数据#!/usr/bin/python3#-*-coding:utf-8-*-"""@Time:2025/1/2022:50@Author:Suyue@Email:1493117872@qq.com@File:cloud_area.py@Project:untitled4"""importpandasaspdimportnumpyasnp......
  • python 探空数据根据“纬度”“经度”“纬度偏移量”“经度偏移量”列,纬度、经度、偏
    在Python中,如果您有包含“纬度”、“经度”、“纬度偏移量”和“经度偏移量”的DataFrame,并且这些值都是浮点数,可以使用这些值来计算新的、具体的经纬度。通常,这些偏移量是基于某种单位(如米、公里等)在地球表面上的距离转换而来的。由于地球是一个近似椭球体,计算精确的偏移后的经纬......