文档章节

python面向对象(二)

听风的小猪
 听风的小猪
发布于 2016/11/08 19:55
字数 484
阅读 18
收藏 0

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

 

© 著作权归作者所有

听风的小猪

听风的小猪

粉丝 81
博文 39
码字总数 35907
作品 0
黄浦
程序员
私信 提问
【Python Web学习路线】干货整理,不谈虚的,让你短时间高效学好它!

无论是大数据、人工智能还是机器学习,Python都是最热门的首选语言。 学好Python,可以从事Python Web工程师、Python数据分析、人工智能专家等岗位。本期专题,分享的主题是“如何成为一枚优...

Eddie_yang
2018/12/24
752
0
如何捅破python编程的那层纸

如何捅破python编程的那层纸 一些朋友自学python过程中,发现书也能看懂,书上的玩具代码也能看懂,但为啥自己不能做习题,不能写代码解决问题,自己不能动手写代码?原因是初学者没有学会计...

黄哥Python培训
2015/02/10
1K
0
云计算培训学院,云计算Python自动化运维开发实战

都忘记是什么时候知道python的了,我是搞linux运维的,早先只是知道搞运维必须会shell,要做一些运维自动化的工作,比如实现一些定时备份数据啊、批量执行某个操作啊、写写监控脚本什么的。后...

长沙千锋
2018/05/15
0
0
关于Python的类成员和Javascript的原型

偶然发现两个的设计思路是一致的(个人理解,欢迎指正)。这里简要分析一下: Python的类成员,也就是直接定义在类里的变量(实例成员是用self.x直接声明的),而类方法就是用@classmethod说...

Shawphy
2011/08/30
236
2
如何学习一门新的语言二——方法与步骤

之前发表过一篇文章,也是谈如何学习一门新的语言《如何学习一门新的语言》,这篇文章主要的关注点是心态。 今天这篇文章主要的关注点是具体的方法和步骤,是我学习C++和python的一些经验,整...

晨曦之光
2012/06/06
168
0

没有更多内容

加载失败,请刷新页面

加载更多

parseint和isNaN用法

本文转载于:专业的前端网站➭parseint和isNaN用法 <!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title></head><body><script> var a='12'; alert......

前端老手
36分钟前
6
0
Kylin 精确去重在用户行为分析中的妙用

作者:史少锋,Apache Kylin committer & PMC,2019/10/11 在上次文章《如何在 1 秒内做到大数据精准去重》中,我们介绍了 Apache Kylin 为什么要支持大数据集上的精确去重,以及基于 Bitmap...

ApacheKylin
48分钟前
5
0
学习记录(二) es6基本语法(rest参数,模板化,axios模块,拦截器)

日常学习记录 模块化:把一个大文件分成多个小文件,按照一定规范进行拼接 es5写法: 导出:module.exports = 数据 导入:require("路径") /路径未添加后缀名时 //默认添加.js //把路径作为文件名...

Pole丶逐
51分钟前
4
0
以程序员的角度怎么购买一台「性价比高的电视」

前俩天有小伙伴在我的文章下留言,说能否把 【国内电视机都介绍一下】,今天我已在TV端开发多年的程序员的角度。谈谈已程序员的角度如何购买一台性价比高的电视。 国内大的电视机品牌介绍 长...

我们都很努力着
55分钟前
3
0
PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部