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)
    
  • 相关阅读:
    综合练习-词频统计
    组合数据类型综合练习
    Python综合练习
    PostOrder_Traversal 二叉树的非递归后序遍历
    PAT甲级-1152-Google Recruitment(20 分)
    PAT甲级-1007-Maximum Subsequence Sum (25 分)
    macOS MOjave运行pygame不显示图像-解决方案
    PAT甲级-1004-Counting Leaves(30 分)
    Python进阶-Numpy科学计算库(简单入门)
    回文日期
  • 原文地址:https://www.cnblogs.com/messi-mu/p/13985830.html
Copyright © 2011-2022 走看看