Python的魔法方法setitem, getitem, delitem总结与案例分析

我们在Python中定义class的时候有几个很有意思的魔法方法, 这些方法可以让你创建的类富有其他builtin类型的class的特性(比如dict字典, list等)。

案例一: 模拟python中的字典类

class MyDict:
      def __init__(self,key,value):
            self.my_dict = {
    
    }
            self.my_dict[key] = value
      def __getitem__(self,key): 
            return self.my_dict[key]
      def __setitem__(self,key,value): #当你给这个类的实例传入key, value参数时会直接给实例的my_dict字典变量赋值
            self.my_dict[key] = value
      def __delitem__(self, key):
        	del self.my_dict[key]
        	
myDictInstance = MyDict('name','Tyler')
print(myDictInstance['name']) #Tyler
myDictInstance['Age'] = '32'
print(myDictInstance['Age']) #32

上面这个例子看起来没什么实际意义, 那么下面举一个api自动化测试的实际工作案例:在自动化测试一个软件的API时往往需要设置api请求的request header,request payload等。 如果我们实际使用中发现一个api class的实例的request header频繁改变,但是request payload等却基本不变。 那我们就可以给这个api class设置魔法方法使得外界默认传递参数只修改header字段。

案例二: 只修改API class中的header变量,其他变量不变

class API():
    def __init__(self, url=None, user=None, password=None, scope="system"):
        self.url = url
        self.user = user
        self.password = password
        self.scope = scope
        self.headers = self._headers()
        
    def _headers(self):
     headers = {
    
    
         "Content-Type": "application/json",
         "Accept": "application/json"
     }
     return headers
   
    def __setitem__(self, key, value):
        self.headers[key] = value
        return self.headers

    def __getitem__(self, key):
        return self.headers[key]

apiInstance = API(url, user, pwd)
apiInstance['key1'] = 'value1'
apiInstance['key2'] = 'value2'
print(apiInstance.headers)
'''
{
    
    
         "Content-Type": "application/json",
         "Accept": "application/json",
         "key1": "value1",
         "key2": "value2"     
}
'''

Java中没有找到类似的魔法方法, 如果有知道的大牛也欢迎留言分享~

猜你喜欢

转载自blog.csdn.net/TylerDu/article/details/106776747