lei.py class Cat: #使用__doc__可查看说明 ''' 这是一个猫的类 ''' def __init__(self,name,tail_length=10): #构造函数 初始化时执行 self.name = name self.tail_length = tail_length self.__privatename = name #私有属性 被保护的变量 print('我是一只小猫,我的名字叫'+self.name) def __del__(self): #析构函数 删除del时执行 print('%s被删除了'%self.name) def __call__(self, *args, **kwargs): print('cat:',sum(args)) def __str__(self): return '我是一只叫'+self.name+'的猫' def __len__(self): return self.tail_length def __iter__(self): return iter([1,2,3,4]) #返回一个迭代器 def __getitem__(self, key): #使对象属性具备字典获取的功能 if key == 'name': return self.name else: return None def __setitem__(self, key, value): #使对象属性具备字典修改的功能 if key == 'name': self.name = value def __delitem__(self, key): #使对象属性具备字典删除的功能 if key == 'name': del self.name def __add__(self, other): #使对象具有相加的功能 出现加号就运行此代码 if isinstance(other,Cat): return [self.name,other.name] elif isinstance(other,list): other.append(self.name) return other def __mul__(self, other): return '我俩是'+self.name+other.name
test.py from lei import Cat aa = Cat('小困子') print(aa.__doc__) #查看类的说明 print(aa.__module__) #查看类所在位置 print(aa.__class__) #查看对象所属类 aa(1,2,3,4,5,6,7,8,9,10) #__call__方法使对象可以被调用 print(callable(aa)) #查看对象是否可以被调用 print(aa.__dict__) #查看对象所有的属性 私有属性亦可被访问 print(aa._Cat__privatename) #私有属性访问方法加_类名 #__str__()魔法方法 print(str(aa)) #__str__使对象被print(str())时执行def __str__(self)下的return语句 print(aa) #__str__使对象被print时执行def __str__(self)下的return语句 #__len__()魔法方法 print(len(aa)) #__len__使对象在被len()时执行__len__()下的return语句 #__iter()__魔法方法 迭代器 使对象可以被迭代 for i in aa: print(i) #字典的修改、删除操作 dic = {'name':'xiaokunzi','age':25,'sex':'girl'} print(dic) dic['name'] = 'xiaopazi' print(dic) del dic['age'] print(dic) print(aa['name']) #__getitem__(self, key)使其具备字典获取的功能 aa['name'] = 'kunkun' #__setitem__(self, key, value)使其具备字典修改的功能 print(aa.__dict__) ''' del aa['name'] #__delitem__(self, key)使其具备字典删除的功能 print(aa.__dict__) ''' #数学运算 +-*/ 魔法方法 #__add__() + #__sub__() - #__mul__() * #__div__() / #__mod__() % #__pow__() ** x = 1 y = 2 print(x+y) aa1 = Cat('小耙子') bb1 = Cat('小黄子',20) print(aa1 + bb1) #__add__(self, other)使类的对象具有相加的功能 cc1 = Cat('kunkunzi') he = aa1 + bb1 print(cc1 + he) print(aa1 * bb1)
运行结果:
我是一只小猫,我的名字叫小困子
这是一个猫的类
lei
<class 'lei.Cat'>
cat: 55
True
{'name': '小困子', 'tail_length': 10, '_Cat__privatename': '小困子'}
小困子
我是一只叫小困子的猫
我是一只叫小困子的猫
10
1
2
3
4
{'name': 'xiaokunzi', 'age': 25, 'sex': 'girl'}
{'name': 'xiaopazi', 'age': 25, 'sex': 'girl'}
{'name': 'xiaopazi', 'sex': 'girl'}
小困子
{'name': 'kunkun', 'tail_length': 10, '_Cat__privatename': '小困子'}
3
我是一只小猫,我的名字叫小耙子
我是一只小猫,我的名字叫小黄子
['小耙子', '小黄子']
我是一只小猫,我的名字叫kunkunzi
['小耙子', '小黄子', 'kunkunzi']
我俩是小耙子小黄子
kunkun被删除了
小耙子被删除了
小黄子被删除了
kunkunzi被删除了