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
    陕西

    爱,就是你和某个人一起经历的一切。
  • 相关阅读:
    在oracle中通过connect by prior来实现递归查询!
    c# System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本
    c# 水晶报表的设计(非常的基础)
    webapi+EF(增删改查)
    简单三层分页aspnetpager控件(欢迎指点)
    listbox 多选删除(找了好多都不行,终于让我写出来了)
    execl导出(HTML,repearter控件)
    SQL Server中截取字符串常用函数
    几个经常用到的字符串的截取
    gridview的增删改
  • 原文地址:https://www.cnblogs.com/afly-8/p/13561145.html
Copyright © 2011-2022 走看看