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

    运行结果




  • 相关阅读:
    HBuilder运行时Chrome时提示“浏览器运行尚不支持此种类型文件
    微信小程序开发指南
    mysql免安装版win10的安装教程
    跨域解决方案
    安装sass(css预处理语言)
    vscode必装插件(Vue)
    laravel低版本安装pjax出问题解决方法
    laravel笔记1后台配置
    php 类和方法
    PHP类和对象之类的属性
  • 原文地址:https://www.cnblogs.com/double12gzh/p/10166104.html
Copyright © 2020-2023  润新知