zoukankan      html  css  js  c++  java
  • 魔法方法总结

    一、__call__方法

    class A():
        def __call__(self, *args, **kwargs):
            print("我的名字叫做中南毛毛虫")
    
    # 于是便可以进行以下的操作:
    mkc = A()
    mkc()
    A()()
    

    二、__len__方法

    class Class():
        def __init__(self, name):
            self.name = name
            self.student = []
        def __len__(self):
            return len(self.student)
    
    py2020 = Class('python_2020')
    print(len(py2020)) #0
    py2020.student.append('messi')
    print(len(py2020)) #1
    py2020.student.append('mkc')
    print(len(py2020)) #2
    

    三、__new__方法
    作用:实例化时,开辟对象的内存空间,重新__new__方法,可以实现例如:单例模式

    class Person():
        flag = None
        def __new__(cls, *args, **kwargs):
            print("重写子类的__new__方法")
            if cls.flag == None:
                cls.flag = super().__new__(cls)
            return cls.flag
    
        def __init__(self, name, birth):
            self.name = name
            self.birth = birth
    
    
    p1 = Person('mkc', 1993)
    print(p1.name) #mkc
    p2 = Person('xyy', 1994)
    print(p1.name) #xyy
    print(p2.name) #xyy
    

    四、__str__方法

    class Person():
        def __init__(self, name, birth):
            self.name = name
            self.birth = birth
        # 只能返回str类型数据
        def __str__(self):
            return f'此人的名字为{self.name},生日为{self.birth}'
    
    p1 = Person('messi', 1987)
    # 运用场景一:直接打印对象
    print(p1)
    # 运用场景二:运用在%s拼接
    print("刚刚创建了一个Person对象,%s"%(p1))
    # 运用场景二:运用在str(p1)
    print(str(p1))
    

    五、__eq__方法、__lt__方法、__gt__方法
    重写=、>、<的魔法方法

    import time
    
    class Person():
        def __init__(self, name, birth):
            self.name = name
            self.birth = birth
        @property
        def age(self):
            return time.localtime().tm_year - self.birth
    
        def __eq__(self, other):
            return self.name==other.name and self.age == other.age
    
        def __lt__(self, other):
            return self.age > other
    
        def __gt__(self, other):
            return self.age < other
    
    p1 = Person('mkc', 1994)
    p2 = Person('mkc', 1990)
    p3 = Person('mkc', 1994)
    p4 = Person('xyy', 1993)
    print(p1 == p2)
    print(p1 == p3)
    print(p1 > p2)
    print(p1 < p2)
    
  • 相关阅读:
    Orchard part8
    最有效地优化 Microsoft SQL Server 的性能
    MSSQL优化之索引优化
    Orchard使用中的坎坎坷坷
    GridView----CustomRowCellEdit 使用注意事项
    VS 编辑并继续(转载)
    Visual Studio 2010(.NET 4.0)中使用SQLite.NET
    .net环境下ckeditor与ckfinder中文文件链接乱码的问题
    jQuery常用方法集锦
    checkbox、select、radio的设置与获取
  • 原文地址:https://www.cnblogs.com/messi-mu/p/13985830.html
Copyright © 2011-2022 走看看