Python 看书的一些记录 运算符重载
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 看书的一些记录 运算符重载的更多相关文章
- PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天
PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数 1 构造 2 析构 3 赋值 4 拷贝构造 5 oper ...
- C++运算符重载学习总结
在C ++中,我们可以使运算符适用于用户定义的类. 这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载. 例如,我们可以在像String这样的类中重载运算符'+',这样我们就可 ...
- python运算符重载(二)
一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...
- python运算符重载
python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...
- 看懂Gradle脚本(4)- Groovy语法之运算符重载
继续讨论Task定义 回想一下前一篇文章的样例: task myTask { doLast { println 'hello world!' } } 这段脚本定义了一个名为myTask的任务.而且通过 ...
- Python全栈工程师(异常(高级)、运算符重载)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 Python人工智能从入门到精通 对象的属性管理函数: getattr ...
- [b0018] python 归纳 (四)_运算符重载
# -*- coding: UTF-8 -*- """ 测试运算符重载 加法 总结: python 运算符表达式其实都是调用 类中方法 __xxx__ + <--- ...
- 零基础自学Python是看书还是看视频?
很多人都碍于Python培训班的高昂费用和有限的空余时间都选择自学Python,但是没有老师帮助,显得有些迷茫,不知应该从何处学起,也不知识看书学习还是应该看视频学习.本就来谈谈这个话题. 我们先 ...
- Python 中的运算符重载
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...
随机推荐
- unittest框架
在我们真正的编写测试用例之前,我们需要了解一下测试框架. unittest是python自带的单元测试框架,尽管其主要是为单元测试服务的,但我们也可以用它来做接口的自动化测试. unittest框架为 ...
- Java中的String、StringBuffer和StringBuilder的区别
类型 是否可变 线程安全 能否频繁修改 String 不可变 安全 否 StringBuffer 可变 安全 能 StringBuilder 可变 不安全 能 1.可变与 ...
- 小白零基础C#学习笔记
一.概述 1..Net 1)..Net平台 2)..Net Frameword框架 说明:是.Net平台中不可缺少的一部分,提供了一个稳定的运行环境来保证.Net平台开发的各种应用能够正常运转. 2. ...
- hybird app 工具选型
目前hybird app工具众多,如何选择?哪个坑少点呢? 下面来分析一下: 1开发工具都开源.基于Eclipse的有:apicloud,WeX5 2热门指数.下面的百度的搜索结果数,代表不了什么,至 ...
- netbeans 窗体字体大小设置
当计算机分辨率变大的时候,打开netbeans的时候,字体就会变得越来越小 看起来很不爽,所要就要改变一下,窗体字体大小. 在网上找到了一段修改netbeans窗体字体大小的配置信息,现标记起来,以便 ...
- 5.vs的各个组成部分
启动vs (1).双击vs的打开图标 (2).输入devenv 编写项目时,命名的时候,尽量不要使用中文. 我们暂时将.cs文件理解为是一个类文件. 在 视图菜单 下可以打开 解决方案资源管理器 ...
- 处理IIS 255错误,和相关信息
不知不觉已经注册博客一年多了,当初看见博客园的大神,自己也想像他们一样多写一些有用的,结果,,,不言而喻.在这里又感慨了一下,进入正题了.. 最近在公司服务器接触的比较多, 遇到了一个255 的问题 ...
- UrShop 商城系统介绍
UrShop能够帮助企业快速构建个性.高效.稳定.安全的网上商城并减少二次开发带来的成本.对于网店来说,UrShop除了安装便捷,功能上强大以外,操作上也非常方便快捷.优社电商秉承设身处地为客户着想的 ...
- jQuery 显示与隐藏 tab选项卡
方法一:使用display样式:block.none来控制文本的显示与隐藏 <div class="explain_text"> 移动互联网为企业提供了连接用户的新方式 ...
- node.js 模块和其下载资源的镜像设置
以前安装 electron 时总是失败,然后就在淘宝镜像上下载好相应版本的文件放到用户目录来解决问题. 后来研究发现 npm 不仅可以设置 node.js 模块仓库的代理, 同样可以设置像 elect ...