[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]方法 这类事物具有什么样的行为 定义简单的类: 定义只 ...
随机推荐
- open-falcon之agent
功能 采集数据,解析数据,上报数据至transfer 基本涵盖了系统层面监控指标,直接将数据转换为metricValue形式,上报至transfer 支持插件采集,代码插件放可受git管理,放置在pl ...
- python框架---->APScheduler的使用
这里介绍一下python中关于定时器的一些使用,包括原生的sche包和第三方框架APScheduler的实现.流年未亡,夏日已尽.种花的人变成了看花的人,看花的人变成了葬花的人. python中的sc ...
- 在ubuntu中安装rpm包
Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb. sudo apt-get install alien #alien默认没有安装,所以首先要安装它 su ...
- testmath
$\Huge ans = \frac{ \sum\limits_{i=1}^{m}{ (x_i - \bar{x})^2 } }{m} \cdot m^2 \\$
- windows中安装pip,setuptools,django等
1,安装Python3.6 (下载exe文件,双击安装) 注意设置环境变量,让Python的在任意位置都可以执行 .Python 下载地址:https://www.python.org/do ...
- 使用spring提供的ReflectionUtils简化项目中反射代码的复杂性
在项目中有时候我们会使用到反射的功能,如果使用最原始的方法来开发反射的功能的话肯能会比较复杂,需要处理一大堆异常以及访问权限等问题.spring中提供了ReflectionUtils 这个反射的工具类 ...
- 【CF720D】Slalom 扫描线+线段树
[CF720D]Slalom 题意:一个n*m的网格,其中有k个矩形障碍,保证这些障碍不重叠.问你从(1,1)走到(n,m),每步只能往右或往上走,不经过任何障碍的方案数.两种方案被视为不同,当且仅当 ...
- 【BZOJ3413】匹配 离线+后缀树+树状数组
[BZOJ3413]匹配 Description Input 第一行包含一个整数n(≤100000). 第二行是长度为n的由0到9组成的字符串. 第三行是一个整数m. 接下来m≤5·10行,第i行是一 ...
- iOS计算两个时间的时间差
+ (long)calculteHourL:(NSDate *)endDate startDate:(NSDate *)startDate { NSCalendar *cal = [NSCalenda ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 抽象 之二
本文是阅读 http://book.mixu.net/distsys/abstractions.html 的笔记. 第二章的题目是"Up and down the level of abst ...