'''
内建属性:
    如:__init__(self)  "魔法"方法 并不是私有化, 可直接访问
'''


class Person:
    # 构造方法:外界创建类的实例时调用
    # 构造方法是初始化实例属性的最佳时机
    def __init__(self, name, age, rmb):
        print(name, "__init__:劳资被创建了")
        self.name = name
        self.age = age
        self.rmb = rmb

    def __len__(self):
        return int(self.rmb)

    def __gt__(self, other):
        if self.rmb > other.rmb:
            return True
        else:
            return False

    def __add__(self, other):
        return Person(self.name + "-" + other.name, min(self.age, other.age), self.rmb + other.rmb)

    def __sub__(self, other):
        return Person(self.name + "VS" + other.name, self.age + other.age, abs(self.rmb - other.rmb))

    def __mul__(self, other):
        print("相乘")
        return self

    def __mod__(self, other):
        print("取余")
        return other

    '''
    属性访问时拦截器,打log
    不要在__getattribute__方法中调用self.xxxx
    self.xxxx 此时要获取对象的属性,那么就会跳转到__getattribute__方法去执行,会循环递归
    其他地方也不能用self.xxxx访问
    '''

    # def __getattribute__(self, obj):
    #     if obj == 'age':
    #         pass
    #         return '怎么可以这么直接问伦家名字'
    #     else:  # 测试时注释掉这2行,将找不到subject2
    #         return object.__getattribute__(self, obj)

    # 实例字符串表示,可读性
    def __str__(self):
        return "{name:%s;age:%d;rmb:%.2f}" % (self.name, self.age, self.rmb)

    # 析构函数
    # Python的垃圾回收管理机制,尽量不要自己定义
    '''
    python垃圾回收机制:
        采用的是引用计数机制(为主),标记为辅
        当一个对象有新的引用时,增加;对象被删除,减少
        引用计数为0时,该对象生命就结束了。
    '''

    # def __del__(self):
    #     print("__del__:我被回收了")

    # 自我介绍方法
    # self = 类的实例
    def tell(self):
        print("我是%s,我%d岁了,我有存款%.2f万元" % (self.name, self.age, self.rmb))
        # print("我是%s,我有存款%.2f万元" % (self.name, self.rmb))


if __name__ == '__main__':
    # 创建Person类的实例
    p1 = Person("陈独秀", 60, 500)
    p2 = Person("秀芹", 18, 0)

    # 调用实例方法
    p1.tell()

    # 删除实例
    # del p1
    print(len(p1))

    print(p1 > p2)

    # print(p1 + p2)
    print(p1 - p2)
    # print(p1 * p2)
    # print(p1 % p2)

    print(p2.age)

results matching ""

    No results matching ""