Python语言面向对象(二)
小标 2018-10-09 来源 : 阅读 1324 评论 0

摘要:本文主要向大家介绍了Python语言面向对象(二),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了Python语言面向对象(二),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

python魔术方法:魔术方法是面向对象Python语言中的一切。它们是你可以自定义并添加“魔法”到类中的特殊方法。它们被双下划线环绕(比如init或lt)。


实例一、python实例化过程
首先调用new方法,返回一个Programer对象,然后把Programer对象交给init,由init对属性设置。
class Programer():
    def __new__(cls,*args,**kwargs):
        print('call __new__ method')
        print(args)
        return super(Programer,cls).__new__(cls)

    def __init__(self,name,age):
        print('call __init__ method')
        self.name = name
        self.age = age

if __name__ == '__main__':
    programer = Programer('Albert',25)
    print(programer.__dict__)
运行结果:
call __new__ method
('Albert', 25)
call __init__ method
{'name': 'Albert', 'age': 25}
实例二、类与运算符



class Programer(object):
    def __init__(self,name,age):
        self.name = name
        if isinstance(age,int):
            self.age = age
        else:
            raise Exception('age must be int')

    def __eq__(self,other):
        if isinstance(other,Programer):        # 首先判断是否Programer对象
            if self.age == other.age:
                return True
            else:
                return False
        else:
            raise Exception('The type of object must be Programer')

    def __add__(self,other):
        if isinstance(other,Programer):
            return self.age + other.age
        else:
            raise Exception('The type of object must be Programer')

if __name__ == '__main__':
    p1 = Programer('Albert',25)
    p2 = Programer('Bill',30)
    print(p1==p2)
    print(p1+p2)
运行结果:
False
55
实例三、类的展现

python里面的内建函数大部分都是由魔术方法支持的,如果想让类的对象使用python里面的内建方法,则需要定义相应的魔术方法。
class Programer(object):
    def __init__(self,name,age):
        self.name = name
        if isinstance(age,int):
            self.age = age
        else:
            raise Exception('age must be int')

    def __str__(self):
        return '%s is %s years old'%(self.name,self.age)

    def __dir__(self):
        return self.__dict__.keys()

if __name__ == '__main__':
    p = Programer('Albert',25)
    print(p)
    print(dir(p))
运行结果:
Albert is 25 years old
['age', 'name']
实例四、类的属性控制

class Programer(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __getattribute__(self,name):
        # return getattr(self,name) # 会产生无限递归
        return super(Programer,self).__getattribute__(name) # 调用父类的getattribute方法,不会产生无限递归

    def __setattr__(self,name,value):
        # setattr(self,name,value) # 会产生无限递归
        self.__dict__[name] = value

if __name__ == '__main__':
    p = Programer('Albert',25)
    print(p.name)
运行结果:
Albert    

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved