首页 > 编程语言 >Python进阶之内置方法

Python进阶之内置方法

时间:2024-05-10 18:55:19浏览次数:26  
标签:__ 触发 进阶 之内 Python self print def name

【一】内置方法引入

__init__	:初始化对象时触发
__del__		:删除类时触发
__new__		:构造类时触发
__str__		:str函数或者print函数触发
__repr__	:repr或者交互式解释器触发
__doc__		:打印类内的注释内容
__enter__	:打开文档触发
__exit__	:关闭文档触发
__getattr__ : 访问不存在的属性时调用
__setattr__ :设置实例对象的一个新的属性时调用
__delattr__ :删除一个实例对象的属性时调用
__setitem__	:列表添加值
__getitem__ :将对象当作list使用 
__delitem__	:列表删除值
__call__	:对象后面加括号,触发执行
__iter__	:迭代器

【二】内置方法使用

【1】__init__,__del__,__new__

  • __init__ : 实例化类得到对象的时候会自动触发
class Student(object):
    def __init__(self, name):
        print(f"实例化类的时候触发")
        self.name = name


student = Student('ligo')
print(student.name)
# 实例化类的时候触发
# ligo
  • __del__ : 当对象/对象关闭销毁的时候自动触发
class Student(object):
    def __init__(self, name):
        print(f"实例化对象的时候触发")
        self.name = name

    def __del__(self):
        print(f"在销毁的时候触发")


student = Student('ligo')
print(student.name)
# 实例化类的时候触发
# ligo
# 当前在销毁的时候触发
  • __new__()方法
class Student(object):
    def __init__(self, name):
        self.name = name

    def __new__(cls, *args, **kwargs):
        obj = object.__new__(cls)
        obj.__init__(*args, **kwargs)
        print(f'{obj.name} is reading')
        return obj


student = Student('ligo')
# ligo is reading

【2】__str__,__repr__

  • __str__方法会在被执行打印操作的时候会自动触发,该方法必须返回字符串类型
class Student(object):
    def __init__(self, name):
        print(f"在实例化对象的时候触发")
        self.name = name

    def __str__(self):
        print(f"在打印对象的时候触发")
        return f'学生姓名:{self.name}'


student = Student('ligo')
# 在实例化对象的时候触发
# 在打印对象的时候触发
print(student) # 打印返回值
# 学生姓名:ligo
  • __repr__方法在交互解释器触发,返回值必须是字符串类型
class Student(object):
    def __init__(self, name):
        print(f"在实例化对象的时候触发")
        self.name = name

    def __repr__(self):
        print(f"在交互解释器的时候触发")
        return f'学生姓名:{self.name}'


student = Student('ligo')
# 在实例化对象的时候触发
# 在交互解释器的时候触发
print(student)  # 打印返回值
# 学生姓名:ligo

【3】__doc__

  • __doc__方法在打印类里面的注释内容的时候会触发
class Student:
    __doc__ = "这是一个学生类"
    pass


print(Student.__doc__)
# 这是一个学生类

【4】__enter____exit__

  • 使用with语句执行代码块时,先执行__enter__方法,然后执行代码块,再执行__exit__方法
class Context(object):
    def __init__(self, data):
        self.data = data

    def __enter__(self):
        print(f'当被with语句打开时触发: {self.data}')

        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(f'当with语句执行结束后触发: {self.data}')


with Context('Hello World') as fp:
    print(fp.data)
# 当被with语句打开时触发: Hello World
# Hello World
# 当with语句执行结束后触发: Hello World

【5】__setattr__,__delattr__,__getattr__

  • __getattr__(self, item): 对象在查找不存在的属性时自动触发
  • __setattr__(self, key, value):对象在设置新的属性时自动触发
  • __delattr__(self, key):删除实例对象的属性时自动触发
class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 获取值
    def __getattr__(self, item):
        print('在查找不存在属性的时候触发')

    def __setattr__(self, key, value):
        print('在设置属性的时候触发')
        super().__setattr__(key, value)

    def __delattr__(self, key):
        print('在删除属性的时候触发')
        self.__dict__.pop(key)


stu = Student('ligo', 18)
# 在设置属性的时候触发
# 在设置属性的时候触发
# 获取不存在属性
print(stu.sex)
# 在查找不存在属性的时候触发
# None

# 设置属性
stu.age = 20
print(stu.age)
# 在设置属性的时候触发
# 20

# 删除属性
del stu.name
print(stu.name)
# 在删除属性的时候触发

【6】__setitem__,__getitem__,__delitem__

  • __setitem__对象[key]=value 设置值的时候会触发
  • __getitem__获取属性的时候会触发 设置方式为 对象[key]
  • __delitem__删除属性的时候会触发 删除方式为 del 对象[key]
class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 获取值
    def __getitem__(self, item):
        print('在获取属性的时候触发')
        # 对象本身是没有 属性值 = obj[属性名] 这个方法的,通过__getitem__就可以
        print(self.__dict__[item])

    def __setitem__(self, key, value):
        print('在设置属性的时候触发')
        # 向自己的名称空间字典中增加新的属性
        self.__dict__[key] = value

    def __delitem__(self, key):
        print('在删除属性的时候触发')
        # 对象本身是没有 del obj[属性名] 这个方法的,通过 __delitem__ 就可以
        self.__dict__.pop(key)


stu = Student('ligo', 18)
# 获取属性
print(stu['name'])
# 在获取属性的时候触发
# ligo

# 设置属性
stu['sex'] = '男'
print(stu.sex)
# 在设置属性的时候触发
# 男

# 删除属性
del stu['name']
print(stu.name)
# 在删除属性的时候触发
# AttributeError: 'Student' object has no attribute 'name'

【7】__call__

  • 当对象调用函数(obj())时自动触发
class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __call__(self):
        print(f'{self.age}岁的小伙{self.name}')


stu = Student('ligo', 18)
print(stu()) 
# 18岁的小伙ligo

标签:__,触发,进阶,之内,Python,self,print,def,name
From: https://www.cnblogs.com/ligo6/p/18183505

相关文章

  • python 实现类重载(类似C#的类重载,但是远不如C#的类重载好用)
    pipinstallmultipledispatch-ihttps://mirrors.aliyun.com/pypi/simplefrommultipledispatchimportdispatchclassMyClass:ab=11234def__init__(self):self.aa=1@dispatch()defcalculate(self):self.aa=1111......
  • 分享一个使用python调用websocket获取实时行情数据的方法
    这个站点可以获取:外汇、国际期货、国内期货、贵金属、能源、虚拟货币、股指期货、美股、台股、港股、印度股、A股、ETF等以下是Python的连接demo,可以参考下。同时也支持其他后端语言的连接,PHP、Java等。获取品种地址:http://39.107.99.235:1008/market/market.phpimportj......
  • Python进阶之抽象类
    【一】什么是抽象类与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化【二】为什么要有抽象类如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据......
  • Python进阶之封装
    【一】面向对象的三大特性面向对象的三大特性:封装、继承、多态其中最重要的就是封装,封装就是将数据和功能整合到一起我们可以对封装在类和对象中的属性进行访问的控制,有隐藏的和开发的接口【1】什么是封装封装是对具体对象的一种抽象封装就是将某些数据和功能隐藏起来,只......
  • Python-有序字典OrderedDict练习题
    问题:读取键盘输入结果,创建n个键值对,将其排序后放入有序字典并输出。详细描述:根据提示,实现函数功能:读取n(n>0)行输入,以每一行的数据为key,行号(从0开始)为value,建立n对键值对,然后将他们按照key排序后,放入一个有序字典,最后输出这个有序字典。importcollectionsdefFunc():pairs......
  • python教程10-集合
    集合(set)是一个无序的不重复元素序列。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。可以使用大括号 {} 创建集合,元素之间用逗号 , 分隔,或者也可以使用 set() 函数创建集合。集合创建:注意:创建一个空集合必须用 set() 而不是 {},因为 {} ......
  • python教程10-元祖
    元组(tuple)与列表类似,不同之处在于元组的元素不能修改。因此很少使用元组使用小括号 (),列表使用方括号 [] 元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用:元祖调用:修改元祖元组中的元素值是不允许修改的,但我们可以对元组进行连接组......
  • python异常的一些代码笔记
    点击查看代码whileTrue:try:x=int(input("请输入一个数字:"))print("你输入的数字是:",x)except:print("异常,输入的不是数字:")try:a=input("请输入被除数:")b=input("请输入除数:")c=float(a)/float......
  • 使用Python进行数据分析的基本步骤和技巧
    ......
  • python教程9-第三方模块安装
    https://pypi.python.org/pypi是python的开源模块库。收录了⾃全世界python开发者贡献的模块,⼏乎涵盖了你想⽤python做的任何事情。事实上每个python开发者,只要注册⼀个账号就可以往这个平台上传你⾃⼰的模块,这样全世界的开发者都可以容易的下载并使⽤你的模块。下载和安装:......