'''
内建属性:
如:__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 __str__(self):
return "{name:%s;age:%d;rmb:%.2f}" % (self.name, self.age, self.rmb)
'''
python垃圾回收机制:
采用的是引用计数机制(为主),标记为辅
当一个对象有新的引用时,增加;对象被删除,减少
引用计数为0时,该对象生命就结束了。
'''
def tell(self):
print("我是%s,我%d岁了,我有存款%.2f万元" % (self.name, self.age, self.rmb))
if __name__ == '__main__':
p1 = Person("陈独秀", 60, 500)
p2 = Person("秀芹", 18, 0)
p1.tell()
print(len(p1))
print(p1 > p2)
print(p1 - p2)
print(p2.age)