zoukankan      html  css  js  c++  java
  • python常用魔术方法

    常用魔术方法

    方法 描述
    _del_() 销毁魔术方法,触发时机:当一个对象在内存中被销毁的时候自动执行
    _call()_ 可以让类的实例具有类似于函数的行为, 进一步模糊了函数和对象之间的概念。对象后面加括号,触发执行。即:对象() 或者 类()()
    _repr_() 改变对象的字符串显示 ­ 此方法是str()的备胎,如果找不到str()就会找repr()方法。
    _new_() 实例化魔术方法 触发时机: 在实例化对时触发 参数:至少一个cls 接收当前类 返回值:必须返回一个对象实例 作用:实例化对象 注意:实例化对象是Object类底层实现,其他类继承了Object的new才能够实现 实例化对象。
    _str_() 使用print(对象)或者str(对象)的时候触发
    _hash_() Hash算法,是将一个不定长的输入,通过哈希函 数变换成一个定长的输出,即哈希值。
    # __del__()
    class Test:
        def __init__(self):
            print('程序执行')
            print('你好')
        def __del__(self): #当程序执行完了执行del方法
            print('程序执行完了')
    s = Test()
    print('程序执行完了2')
    
    '''
    程序执行
    你好
    程序执行完了2
    程序执行完了
    '''
    
    # __call__()
    class Sum:
        def sum(self):
            a = 0
            i = 0
            while i < 101:
                a = a + i
                i += 1
            print(a)
        def __call__(self, *args, **kwargs):
            self.sum()
    Sum()()
    sum = Sum()
    sum()
    '''
    5050
    5050
    '''
    
    # __repr__()
    class Str:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        # def __str__(self):
        #     return '__str__() 姓名:%s age: %s' % (self.name, self.age)
        def __repr__(self):
            return '__repr__()姓名:%s age: %s' %(self.name, self.age)
    per = Str('李明',18)
    print(per)
    #__repr__()姓名:李明 age: 18,当str方法不存在,会找repr方法
    
    #__new__()
    class Dog:
        def __new__(cls, *args, **kwargs):
            print('new') # 重写
            new = object.__new__(cls) # 调用父类object的new方法才创建new对象
            new.__init__()
            new.__del__()
        def __init__(self):
            print('int')
        def __del__(self):
            print('del')
    d = Dog()
    '''
    new
    int
    del
    del
    '''
    class Num:
        def __init__(self,num):
            self.num = num
    n1 = Num(1)
    n2 = Num(2)
    n3 = Num(3)
    lst = [n1,n2,n3]
    set1 = set(lst)
    print(set1)
    {<__main__.Num object at 0x00000203CBA400C8>, <__main__.Num object at 0x00000203CBA401C8>, <__main__.Num object at 0x00000203CBA40248>}
    
    

    hash()函数默认调用Object类的hash()方法。Hash值是对象的id值/16。

    类的常用函数

    方法 描述
    issubclass() 检测一个类是否是另外一个类的子类 ,返回值布尔类型,格式issubclass(被检测类, 父类) ,或者issubclass(被检测类, (父类1,父类2, 父类3…))
    isinstance() 检测一个对象是否是某个类的对象 ,返回值时布尔,issubclass(对象, 类),issubclass(对象, (类1,类2,类3)),只要一个类是当前对象对象的类,那么最终结果是True

    反射方法

    python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射)

    方法 描述
    hasattr() 判断是否有此变量,返回bool 值 ,hasattr(对象/类,‘成员名’)
    getattr() 获取属性值或者获取方法变量的地址 ,getattr(对象,‘属性名’[,成员不存在时的默认值]), 返回成员的值
    setattr() 给类或者对象设置属性或者方法 (少),setattr(对象,‘成员名’,值)
    delattr() 删除类或者对象的属性或方法 (少),delattr(对象,成员)
    class Teacher:
        name = '斯密斯'
        def __init__(self,name,age):
            self.name = name
            self.age = age
    t = Teacher('haha',25)
    print(hasattr(t,'name')) #判断是否有此变量
    print(getattr(t,'name')) # 获取变量值
    setattr(t,'adress','陕西') #添加
    print(t.adress)
    delattr(t,'adress') # 移除 'adress'
    # print(t.adress)
    

    True
    haha
    陕西

    爱,就是你和某个人一起经历的一切。
  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/afly-8/p/13561145.html
Copyright © 2011-2022 走看看