[py]python面向对象的str getattr特殊方法
本文旨在说清楚 类中的
- def init
- def str
- def getattr
这三个方法怎么用的.
定制输入实例名时输出内容
def __str__会定制输出实例名时候的输出
class Chain(object):
def __str__(self):
return "hello"
c = Chain()
print(c) #本来是<__main__.Chain object at 0x00000000021BE5C0>
# hello
通过def __str__输出属性名
class Chain(object):
def __init__(self):
self.name = "maotai"
def __str__(self):
return self.name
c = Chain()
print(c)
# maotai
__getattr__打印任意属性,如c.xx,c.yy
主要目的是实现动态添加属性
class Chain(object):
# 打印c.xx属性
def __getattr__(self, item):
return item
c = Chain()
print(c.xx)
#xxx
class Chain(object):
def __init__(self):
self.name = "maotai"
# 打印c.xx属性时候返回定制内容
def __getattr__(self, item):
return item, self.name
c = Chain()
print(c.xx)
# ('xx', 'maotai')
剖析打印结果
class Chain(object):
def __init__(self, path=""):
self.__path = path
def __str__(self):
return self.__path ## 打印Chain()的内容
def __getattr__(self, item):
# Chain("%s/%s" % (self.__path, item))即 __str__的结果
return Chain("%s/%s" % (self.__path, item)) ## 打印c.xx时, 返回Chain()的内容
c = Chain()
#c.xx 的结果 Chain("/xx")
print(c.xx)
这个不好想清楚的在于, 往复的调用类执行过程
- 函数返回值
- 递归调用
class Chain(object):
def __init__(self, path=""):
self.__path = path
print(self.__path, "++++")
def __str__(self):
# print(self.__path,"--------")
return self.__path ## 打印Chain()的内容
def __getattr__(self, item):
# Chain("%s/%s" % (self.__path, item))获取到的是 self.__path内容,供__getattr__返回.
# self.__path的内容是 ("%s/%s" % (self.__path, item))
# 第1次 self.__path="/xx", 供__getattr__返回.
# 第2次 self.__path="/xx/yy",供__getattr__返回.
# 第3次 self.__path="/xx/zz",供__getattr__返回.
# return Chain()
# return Chain("/xx")
# return Chain("/xx/yy")
# return Chain("/xx/yy/zz")
return Chain("%s" % (item)) ## 打印c.xx时, 返回Chain()的内容
c = Chain()
#c.xx 的结果 Chain("/xx")
#c.xx.yy 的结果 Chain("/xx/yy")
#c.xx.yy.zz 的结果 Chain("/xx/yy/zz")
print(c.xx.yy.zz)
# /xx/yy/zz
[py]python面向对象的str getattr特殊方法的更多相关文章
- Python面向对象之常用的特殊方法(5)
Python面向对象里面有很多特殊方法,例如__init__(构造方法),__del__(析构方法),这些方法对于面向对象编程非常重要,下面列出一些常用的特殊方法 (1)__call__ class ...
- Python面向对象之反射,双下方法
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- python 面向对象之多态与绑定方法
多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.AB ...
- Python面向对象之私有属性和方法
私有属性与私有方法 应用场景 在实际开发中,对象的某些属性或者方法 可能只希望在对象的内部被使用,而不希望在外部被访问到: 私有属性 就是对象不希望公开的属性: 私有方法 就是对象不希望公开的方法: ...
- python面向对象--类的内置方法
#isinstance(obj,cls)判断obj是否是类cls的实例 #issubclass(cls,cls1)判断cls是否是cls1的子类或派生类 class Foo: pass class B ...
- python面向对象 : 反射和内置方法
一. 反射 1. isinstance()和issubclass() isinstance( 对象名, 类名) : 判断对象所属关系,包括父类 (注:type(对象名) is 类名 : 判断对象所属 ...
- Python 面向对象(四) 反射及其魔术方法
反射 reflection 也有人称之为自省 作用: 运行时获取.添加对象的类型定义信息,包括类 内建方法: getattr(object, name[, default]) 返回object对象 ...
- python 面向对象反射以及内置方法
一.反射 什么是反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对象,都可以使用放射. 反射的四种方法: hasattr:hasattr(objec ...
- Python面向对象编程及内置方法
在程序开发中,要设计一个类,通常需要满足以下三个要求: [1]类名 这类事物的名字,满足大驼峰命名法 [2]属性 这类事物具有什么样的特征 [3]方法 这类事物具有什么样的行为 定义简单的类: 定义只 ...
随机推荐
- PHP关于按位取反结果的推导过程
哎呀几年过去,都快把大学学的计算机导论的知识给忘完了,现在来回顾一下按位去反的流程: <?php /** 首先来补充一下基础知识: php中有4个位运算,分别是&与 |或 ^异或 ~取反 ...
- R语言(入门小练习篇)
问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希 ...
- css笔记 - transform学习笔记(二)
transform转换 CSS transform 属于2D/3D上的转换.变形效果.他不是一个动画,他就是变形.比如正方形变平行四边形,再变圆形.都是形状变成另一个形状. 但是如果配合上transi ...
- SharePoint 2013部署自定义HttpModule访问SPContext.Current的一个问题
如果文档库post提交文档时,自定义HttpModule正好有代码访问SPContext.Current属性则会导致上传文档失败.
- C# List<T> 泛型
1.简介 所属命名空间:System.Collections.Generic List<T>类是 ArrayList 类的泛型等效类.该类使用大小可按需动态增加的数组实现 IList< ...
- 51单片机之IIC通信原理及软件仿真
关于IIC我觉这个博客里面说的已经够清楚了 如下图所示的写操作的时序图: 其实像这种通信协议的要求是很精确的,一点点不对都可能导致在实际工程中无法读取数据.我就是被一个应答位耽误了好久,还好最后被我发 ...
- Vim 使用入门快捷键
Vim 和 Emac 都是利器啊,前段时间决定熟悉一套跨平台的编辑器,以便在 Win,Mac,Ubuntu 下都有相同的编辑体验. 于是尝试了一下 Vim,使用了一段时间,确实比 UE 之类的要高效. ...
- Java -- 给定一个int数组,拼接出最大数值
public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args | ...
- opencv学习笔记之cvSobel 函数解析
首先,我们来开一下计算机是如何检测边缘的.以灰度图像为例,它的理论基础是这样的,如果出现一个边缘,那么图像的灰度就会有一定的变化,为了方便假设由黑渐变为白代表一个边界,那么对其灰度分析,在边缘的灰度函 ...
- 老师的blog整理
python基础部分: 宝哥blog: https://www.cnblogs.com/guobaoyuan/ 开哥blog: https://home.cnblogs.com/u/Neeo 女神笔记 ...