zoukankan      html  css  js  c++  java
  • 面向对象--内置方法

    __名字__
         类中的特殊方法内置方法
    双下方法
    魔术方法 magic_method
    类中的每一个双下方法都有它自己的特殊意义
    
    
    1.__call__ 相当于 对象()
    class A:
        def __call__(self, *args, **kwargs):
            print('执行call方法了')
    a = A()
    a()  # 对象() == 相当于调用__call__方法
    A()()#相当于先实例化得到一个对象,再对对象(),==>和上面的结果一样,相当于调用__call__方法
    结果:
    执行call方法了
    执行call方法了
    
    
    class A:
        def __call__(self, *args, **kwargs):
            print('执行call方法了')
        def call(self):
            print('执行call方法了')
    class B:
        def __init__(self,cls):
            print('在实例化A之前做一些事情')
            self.a = cls()
            self.a()
            print('在实例化A之后做一些事情')
    B(A)
    在实例化A之前做一些事情
    执行call方法了
    在实例化A之后做一些事情

     

    2.__len__  相当于len(obj)

    内置函数和类的内置方法是有联系的
    class mylist:
        def __init__(self):
            self.lst = [1,2,3,4,5,6]
            self.name = 'alex'
            self.age = 83
        def __len__(self):
            print('执行__len__了')
            return len(self.__dict__)
    l = mylist()
    print(len(l))
    
    结果:3
    
    
    class mylist:
        def __init__(self):
            self.lst = [1,2,3,4,5,6]
            self.name = 'alex'
            self.age = 83
        def __len__(self):
            print('执行__len__了')
            return len(self.lst)
    l = mylist()
    print(len(l))
    
    结果:6
     len(obj)相当于调用了这个obj的__len__方法
    __len__方法return的值就是len函数的返回值
    如果一个obj对象没有__len__方法,那么len函数会报错
    3.__new__  特别重要   开辟内存空间的 类的构造方法
     单例类
    class Single:
        __ISINCTANCE = None
        def __new__(cls, *args, **kwargs):
            if not cls.__ISINCTANCE:
                cls.__ISINCTANCE = object.__new__(cls)
            return cls.__ISINCTANCE
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    s1 = Single('aaaa',83)
    s2 = Single('bbbb',40)
    print(s1.name)
    print(s2.name)
    结果:
    bbbb
    bbbb
    
    

    4.__str__  str(obj), '%s'  %  obj,  print(obj)

    class Student:
        def __str__(self):
            return '%s %s %s'%(self.school,self.cls,self.name)
        def __init__(self,name,stu_cls):
            self.school = 'oldboy'
            self.name = name
            self.cls = stu_cls
    a = Student('asd','55')
    print(a)
    q = Student('qwe','66')
    print(q)
    print(str(a))   # 内置的数据类型,内置的类,相当于执行__str__
    print('学生1 : %s'%a)
    
    oldboy 55 asd
    oldboy 66 qwe
    oldboy 55 asd
    学生1 : oldboy 55 asd
     
     
     
  • 相关阅读:
    方便的使用单击和双击更新DataGrid中的数据的例子 (转)
    针对 .NET 开发人员的存储过程评估(转)
    ASP.NET创建Web服务之XML基础结构(转)
    移动业务咨询系统--用VoiceXML开发语音应用程序(转)
    创建动态数据输入用户界面 (转)
    ASP.NET缓存:方法和最佳实践(转)
    ASP.NET 应用程序性能优化(转)
    出色图形用户界面(GUI)设计规范(转,中英对比)
    五种常见的ASP.NET安全缺陷(转)
    ASP.net控件开发系列之(一)开篇(转)
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9392953.html
Copyright © 2011-2022 走看看