理解python中的__str__, __call__, __init__, __getattr__


解释

__getattr__:当调用不存在的属性时访问这个方法
__str__:对象打印出来的字符串(返回用户看到的)
__repr__:对象打印出来的字符串(返回开发者看到的)
__call__:如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符
实例:
class MyClass(object):
    def __call__(self, num):
        print("in __call__: %s", num)

    def __init__(self, num):
        self.num = num 

    def __str__(self):
        print("in __str__")
        return "test"

    def __repr__(self):
        print("in __repr__")
        return "test2"

a = MyClass(4)
print a
print a(75)
a(80)

运行结果


__init__
__getitem__:对象像list那样按照下标取出元素(注意:如若需要使用切片等方法需要自己实现)

实例

import sys, os

class UrlChain(object):
    def __init__(self, path=''):
        print("in __init__")
        self._path = path

    def __getattr__(self, guan):
        print("in __getattr__")
        print("in __getattr__: %s" % guan)
        return UrlChain('%s/%s' % (self._path, guan))

    def __str__(self):
        print("in __str__")
        return self._path

    def __call__(self, index):
        print("in __call__")
        return UrlChain('%s/%s' % (self._path, index))

class CephManager(object):
    base_url = UrlChain('v1')
    
    def func1(self):
        print self.base_url.clusters('JeffreyGuan')

cm = CephManager()
cm.func1()

运行结果




原文地址:https://www.cnblogs.com/double12gzh/p/10166104.html