理解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()

运行结果




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值