Python类的高级函数详解

Cora
Cora
发布时间:2026-10-15 | 4人浏览过
原创

本文深入解析Python类中四个关键的高级函数:__str__用于定义实例字符串表示,__getattr__处理属性访问缺失,__setattr__拦截属性赋值,以及__call__使实例可调用。通过具体代码示例展示各函数的参数、返回值及实际应用场景,帮助开发者掌握Python面向对象编程中的核心机制。

__str__函数:定义实例字符串表示

在Python面向对象编程中,__str__函数用于定义类的字符串表示形式。

  • 当在代码中直接打印该类的实例化对象时,系统会自动调用此函数并返回其定义的字符串内容。
  • 该函数通常用于提供当前类的描述性信息,便于调试和日志记录。
  • 具体用法如下所示:

def __str__(self):
	return str_type
  • 该函数不接受任何额外参数,仅通过self引用当前实例。
  • 其返回值通常为字符串类型,用于描述该类或实例的状态。

__getattr__函数:处理属性访问缺失

__getattr__函数用于处理属性访问时的特殊情况。

  • 当代码尝试访问当前类中未定义或已不存在的属性或方法时,Python解释器会调用此函数,并返回该函数定义的处理逻辑或提示信息。
  • 具体用法如下所示:

def __getattr__(self, key):
	print(something.….)
  • 该函数接收一个关键参数:

key:代表被访问的任意不存在的属性名称。

  • 关于返回值的说明:

返回值可以是任意数据类型,也可以选择不返回任何值(即返回None),具体取决于业务逻辑需求。

__setattr__函数:拦截属性赋值

__setattr__函数用于拦截并处理类中属性的赋值操作。

  • 无论属性是否存在,每次对类属性进行赋值时,该函数都会被触发。
  • 具体用法如下所示:

def __settattr__(self, key,value):
	self._dict_[key] = value
  • 该函数接收两个关键参数:

key:当前正在被赋值的属性名。

value:当前属性所对应的具体赋值内容。

  • 该函数通常不返回任何值,主要用于执行赋值逻辑或副作用操作。

__call__函数:使实例可调用

__call__函数用于改变类的调用方式。

  • 其本质作用是将一个类的实例变成一个可以像函数一样被调用的对象。
  • 具体用法如下所示:

def __call__(self,*args,**kwargs):
	print( 'call will start')
  • 参数部分可以接收任意数量的位置参数和关键字参数。
  • 返回值与常规函数相同,可以选择返回特定结果或无返回值。

以下是上述函数的综合实战示例:


#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time     : 2021/8/15 18:22
# @Author   : InsaneLoafer
# @File     : object_func.py

class Test(object):

    def __str__(self):
        return 'this is a test class'

    def __getattr__(self, key):
        return '这个key:{}并不存在'.format(key)

    def __setattr__(self, key, value):
        print(key, value)
        self.__dict__[key] = value
        print(self.__dict__)

    def __call__(self, *args, **kwargs):
        print('call will start')
        print(args, kwargs)

t = Test()
print(t)
print(t.a)  # 不存在的对象会直接打印出来,而不是报错
t.name = 'insane'
t(123, name='loafer')


"""实现链式操作"""
class Test2(object):
    def __init__(self, attr=''):
        self.__attr = attr

    def __call__(self, name):
        print('key is {}'.format(self.__attr))
        return name

    def __getattr__(self, key):
        if self.__attr:
            key = '{}.{}'.format(self.__attr, key)
        else:
            key = key
        print(key)
        return Test2(key)  # 递归操作

t2 = Test2()
print(t2.a.c('insane'))

this is a test class
这个key:a并不存在
name insane
{'name': 'insane'}
call will start
(123,) {'name': 'loafer'}
a
a.c
key is a.c
insane

Process finished with exit code 0

到此这篇关于Python类的高级函数的文章就介绍到这了,更多相关Python高级函数内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表