zoukankan      html  css  js  c++  java
  • 理解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()

    运行结果




  • 相关阅读:
    MySQL的操作
    Centos7下MySQL的安装
    一键安装Tomcat
    Hola!
    eval
    初级版笔记(修改中)
    decode前先encode(python)
    不能scanf字符串
    第一次做题的一些问题c++
    DSY3163*Eden的新背包问题
  • 原文地址:https://www.cnblogs.com/double12gzh/p/10166104.html
Copyright © 2011-2022 走看看