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)
    
  • 相关阅读:
    [机器学习]单变量线性回归(最小二乘法)
    [机器学习]kNN进邻算法
    Python笔记(读取txt文件中的数据)
    [机器学习笔记] 1监督学习
    LeetCode(Add Two Numbers)
    缓冲区溢出在Linux虚拟机上的实现过程中的问题与解决
    数据库与后端的映射
    电子公文传输系统 团队作业(五):冲刺总结
    电子公文传输系统 团队作业(五):冲刺总结(第一天)
    电子公文传输系统 团队作业(四):描述设计
  • 原文地址:https://www.cnblogs.com/messi-mu/p/13985830.html
Copyright © 2011-2022 走看看