Python教程

Python魔法方法

本文主要是介绍Python魔法方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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被删除了

这篇关于Python魔法方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!