1.类和模块有什么关系?

  (1)类是模块的一部分,是模块对象的属性。

  (2)类和模块都是命名空间,但是类是对于语法的。模块是对于文件的

  (3)类支持多个实例,但是模块被导入时只有一个。

2.什么是抽象超类(抽象基类)?

  抽象超类就是指类的部分行为需要由其子类提供

class Person(object):
"""docstring for Person"""
def __init__(self,name):
self.name = name
def test_func(self):
self.action() # 实现action方法需要在子类中定义进行调用 class Teacher(Person):
"""docstring for Teacher"""
def action(self):
print(self.name) if __name__ =="__main__":
teacher = Teacher("sunqi")
teacher.test_func()

3.Python中的迭代环境都会先尝试调用__iter__方法,如果没有才会调用__getitem__方法进行索引取值。

  • 每次进行迭代,都会尝试用对象的iter内置函数去调用__iter__方法,返回一个迭代器对象,然后不断调用返回对象的next方法,

    直到发生StopIteration异常

  • 若没有__iter__方法,就会调用__getitem__方法,不断索引取值,直到发生IndexError异常。

4.类中的__getattr__与__setattr__

__getattr__ 会在类中查找属性时调用。

__setattr__ 会在设置属性时调用

__getattribute__会在查找属性时调用(无论属性是否存在)

class Test(object):
def __init__(self,data):
self.data = data
def __getattribute__(self,attrname):
print("__getattribute__")
return object.__getattribute__(self,attrname)
def __getattr__(self,attrname):
print("__getattr__")
if attrname == "age":
return 40
else :
return AttributeError
def __setattr__(self,attrname,value):
print("__setattr__")
self.__dict__[attrname] = value
# self.__setattr__(attrname,value) if __name__ == "__main__":
t = Test("test")
print(t.data)
print("*" * 10)
print(t.age)
print("*" * 10)
print(t.name)
t.name = "sunqi"

__setattr__
__getattribute__
__getattribute__
test
**********
__getattribute__
__getattr__
40
**********
__getattribute__
__getattr__
<class 'AttributeError'>
__setattr__
__getattribute__

5.右侧加法和原处加法__radd__ , __iadd__

当加号右侧是类实例,左侧不是类实例才会调用__radd__,其他情况都会由左侧对象调用__add__方法(了解一下)

__iadd__ 实现了+=功能

Python 看书的一些记录 运算符重载的更多相关文章

  1. PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天

    PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数    1  构造  2  析构   3  赋值  4 拷贝构造  5 oper ...

  2. C++运算符重载学习总结

    在C ++中,我们可以使运算符适用于用户定义的类. 这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载. 例如,我们可以在像String这样的类中重载运算符'+',这样我们就可 ...

  3. python运算符重载(二)

    一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...

  4. python运算符重载

    python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...

  5. 看懂Gradle脚本(4)- Groovy语法之运算符重载

    继续讨论Task定义 回想一下前一篇文章的样例: task myTask { doLast { println 'hello world!' } } 这段脚本定义了一个名为myTask的任务.而且通过 ...

  6. Python全栈工程师(异常(高级)、运算符重载)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图 Python人工智能从入门到精通 对象的属性管理函数: getattr ...

  7. [b0018] python 归纳 (四)_运算符重载

    # -*- coding: UTF-8 -*- """ 测试运算符重载 加法 总结: python 运算符表达式其实都是调用 类中方法 __xxx__ + <--- ...

  8. 零基础自学Python是看书还是看视频?

    很多人都碍于Python培训班的高昂费用和有限的空余时间都选择自学Python,但是没有老师帮助,显得有些迷茫,不知应该从何处学起,也不知识看书学习还是应该看视频学习.本就来谈谈这个话题.   我们先 ...

  9. Python 中的运算符重载

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...

随机推荐

  1. Oracle redo undo

    通常对undo有一个误解,认为undo用于数据库物理地恢复到执行语句或事务之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可 ...

  2. Windows10上安装OpenStack

    1. 启动Hyper-V 2. 在Hyper-V内安装Ubuntu 这两部可以参考http://www.cnblogs.com/jimmy-y/p/5328306.html(Ubuntu16类似) 3 ...

  3. 一个基于QT简单登录对话框(带验证码功能)

    1. 对话框样式 2. 源代码 ①. main.cpp #include <QtGui/QApplication> #include "QLoginDialog.h" ...

  4. Autel MaxiSys MS908CV Diagnostic System for Commercial Vehicles

    As a new member of Autel’s MaxiSys family, the MaxiSys CV is built on the powerful MaxiSys 908 platf ...

  5. linux下WordPress安装

    http://www.cnblogs.com/xiaofengkang/ WordPress简介 WordPress 是一种使用 PHP语言和 MySQL数据库开发的开源.免费的Blog(博客,网志) ...

  6. leetcode 892. 三维形体的表面积

    题目描述: 在 N * N 的网格上,我们放置一些 1 * 1 * 1  的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 返回最终形体的表面积. ...

  7. JobService 7.0 定时任务不生效

    代码 // 构建JobInfo对象,传递给JobSchedulerService JobInfo.Builder builder = new JobInfo.Builder(JOB_ID,new Co ...

  8. C++常用数据结构(对照python)

    python: c++17: get set extend/update find index size loop list std::vector v[0]; v.emplace_back(&quo ...

  9. MOS管

    mos工作原理:http://www.360doc.com/content/15/0930/11/28009762_502419576.shtml, 开关特性好,长用于开关电源马达驱动,CMOS相机场 ...

  10. Django重新整理2

    Auth认证: 1.分配路由和创建视图函数 2.在视图函数中引用Django为我们提供的用户认证组建Auth 3.直接进行判断: def login(request): if request.meth ...