码迷,mamicode.com
首页 > 编程语言 > 详细

[py]python str getattr特殊方法

时间:2018-01-21 22:31:46      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:pos   print   self   动态添加   __str__   code   实现   方法   attr   

定制输入实例名时输出

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特殊方法

标签:pos   print   self   动态添加   __str__   code   实现   方法   attr   

原文地址:https://www.cnblogs.com/iiiiiher/p/8325617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!