首页 > 其他分享 >面向对象之内置方法

面向对象之内置方法

时间:2024-01-29 14:57:02浏览次数:22  
标签:__ 触发 name 之内 self 面向对象 init print 方法

面向对象之内置方法

  • Python的Class机制内置了很多特殊的方法来帮助使用者高度定制自己的类
  • 这些内置方法都是以双下划线开头和结尾的,会在满足某种条件时自动触发
__init__	:初始化类时触发
__del__		:删除类时触发
__new__		:构造类时触发
__str__		:str函数或者print函数触发
__repr__	:repr或者交互式解释器触发
__doc__		:打印类内的注释内容
__enter__	:打开文档触发
__exit__	:关闭文档触发
__getattr__ : 访问不存在的属性时调用
__setattr__ :设置实例对象的一个新的属性时调用
__delattr__ :删除一个实例对象的属性时调用
__setitem__	:列表添加值
__getitem__ :将对象当作list使用 
__delitem__	:列表删除值
__call__	:对象后面加括号,触发执行
__iter__	:迭代器

一、__init__()__del__()__new__()

  • Python的Class机制内置了很多特殊的方法来帮助使用者高度定制自己的类

  • 这些内置方法都是以双下划线开头和结尾的,会在满足某种条件时自动触发

  • __new__提供框架最先触发,__init__提供类的内容接着触发,__del__在程序结束删除类时被触发

class Person(object):
    def __init__(self):
        print('__init__被触发了!')

    def __new__(cls, *args, **kwargs):
        print('__new__被触发了!')
        return super().__new__(cls, *args, **kwargs)

    def __del__(self):
        print('__del__被触发了!')


people = Person()
print("1", end='  ')
print("2", end='  ')
print("3")
'''
__new__被触发了!
__init__被触发了!
1  2  3
__del__被触发了!
'''

二、__str____repr__

[1]__str__(打印时被触发)

  • print功能打印的就是它的返回值
  • 我们通常基于方法来定制对象的打印信息
  • 该方法必须返回字符串类型
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        print('__srt__被触发了!')
        return f'my name is {self.name},i am {self.age} years old'


people = Person('Xanadu', 22)
print(people)
'''
__srt__被触发了!
my name is Xanadu,i am 22 years old
'''

[2]__repr__

  • repr或者交互式解释器触发
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        print('__repr__被触发了!')
        return f'my name is {self.name},i am {self.age} years old'


people = Person('Xanadu', 22)
# __repr__的触发需要在打印时使用repr()或者交互式解释器触发
print(repr(people))
'''
__repr__被触发了!
my name is Xanadu,i am 22 years old
'''
  • 如果__str__没有被定义,那么就会使用__repr__来代替输出

isinstance(obj,cls)issubclass(sub,super)

四、__doc__

class Person(object):
    '文本描述'
    ...


people = Person()
print(people.__doc__)  # 文本描述

__setattr__,__delattr__,__getattr__

  • __getattr__(self, name): 访问不存在的属性时调用
  • __setattr__(self, name, value):设置实例对象的一个新的属性时调用
  • __delattr__(self, name):删除一个实例对象的属性时调用
class Person(object):
    def __init__(self, name):
        print('触发了 init 方法')
        self.name = name

    def __getattr__(self, item):
        print(f'触发了 getattr 方法')

    # 在类中定义了__setattr__后,必须要执行必要代码,否则实例化出的对象名称空间中的变量都会清零
    def __setattr__(self, key, value):
        print('触发了setattr方法')
        self.__dict__[key] = value


people = Person('Xanadu')
'''
触发了 init 方法
触发了setattr方法
'''
print(people.name)  # Xanadu
print(people.__dict__)  # {'name': 'Xanadu'}

六、__call__

  • 对象后面加括号,触发执行。
  • 注:构造方法的执行是由创建对象触发的
    • 即:对象 = 类名() ;
  • 而对于 __call__ 方法的执行是由对象后加括号触发的
    • 即:对象() 或者 类()
class Person(object):
    def __init__(self, name, age):
        print('__init__被触发了!')
        self.name = name
        self.age = age

    def __call__(self, *args, **kwargs):
        print('__call__被触发了!')
        print(f'name : {self.name}, age : {self.age}')


people = Person('Xanadu', 22)
people()
'''
__init__被触发了!
__call__被触发了!
name : Xanadu, age : 22
'''

标签:__,触发,name,之内,self,面向对象,init,print,方法
From: https://www.cnblogs.com/taoyuanshi/p/17994497

相关文章

  • 面向对象之派生和组合
    面向对象之派生和组合派生派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法一、派生的方法子类是必须要派生出自己的数据属性不然就无数据属性可用子类无法使用父类中__init__定义的属性classPerson(object):def__init__(self,name,age......
  • 项目管理工具方法--帕累托分析
    ......
  • 项目管理工具方法--利弊均衡表
    ......
  • 在Python中,子类继承父类并调用父类的构造方法有几种方式: 1. 如果子类没有重写`__init
    在Python中,子类继承父类并调用父类的构造方法有几种方式:1.如果子类没有重写`__init__`,实例化子类时,会自动调用父类定义的`__init__`¹。```pythonclassFather(object):  def__init__(self,name):    self.name=nameclassSon(Father):  passson=So......
  • 无涯教程-Swift - Method(方法)
    在Swift4语言中,与特定类型关联的函数称为"方法"。在ObjectiveC中,类用于定义方法,而Swift4语言为用户提供了具有类,结构和枚举方法的灵活性。实例方法在Swift4语言中,可通过方法访问Class,Structures和Enumeration。方法可以写在{}花括号内,它具有对类型的方法和属性的隐式访问,......
  • 网易邮箱海外注册方法
    1.网易邮箱海外注册的需求在当今全球化的互联网时代,越来越多的人需要使用网易邮箱进行海外注册,以便在国际交流、工作和学习中保持联系和沟通。因此,了解网易邮箱海外注册的方法至关重要。2.网易邮箱海外注册的步骤网易邮箱海外注册的步骤相对简单,只需按照以下几个步骤进行操作即可......
  • 在Python的Tkinter库中,`ttk.Combobox`是一个组合框控件,它允许用户从下拉列表中选择一
    在Python的Tkinter库中,`ttk.Combobox`是一个组合框控件,它允许用户从下拉列表中选择一个选项,也可以让用户输入内容。以下是一些主要的参数和方法:1.**创建Combobox**¹²:  ```python  importtkinterastk  importtkinter.ttkasttk  root=tk.Tk()  ......
  • linux centos yum 报错[Errno 256]No more mirrors to try 解决方法
    解决方案大致有三种一、更新yum二、若不行,可能是因为DNS不稳定吧,因为yum安装时会从三个”repo源“(base,extras,updates)随机获取地址背景我使用yum方式安装软件时,比如zabbix这种软件,我们在安装时一般都是直接到zabbix官网,按照官方的步骤进行安装,但是有一个问题,官方的服务器不在国......
  • java读取并解析XML文件的方法有哪些?
    XMLStreamReader:1. DOM(DocumentObjectModel)方式:DOM将整个XML文档加载到内存中,形成一颗树状结构,然后通过操作这个树状结构来获取所需要的数据。示例代码如下:importjavax.xml.parsers.*;importorg.w3c.dom.*;publicclassXMLParser{publicstaticvoidmain(Stri......
  • Win11跳过联网方法
    Win11系统在首次启动时要求用户连接到互联网进行激活。然而,在某些情况下,用户可能无法连接到互联网或选择不连接。在这种情况下,可以采取以下方法绕过联网激活:方法一:关闭“网络连接流”进程在联网界面,按下Shift+F10快捷键以打开命令提示符窗口。在命令提示符窗口中输入taskmgr并......