• python学习笔记(二十三)私有方法和私有属性


    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。

    但是,从前面Person类的定义来看,外部代码还是可以自由地修改一个实例的name属性。

    如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。

    import redis
    class My(object):
        def __init__(self):
            self.__host = '118.24.3.40'  #私有变量,只能在类里面使用,前面加两个下划线
            self.__port = 6379
            self.__password = 'HK139bc&*'
            try:
                self.r = redis.Redis(host=self.__host,port=self.__port,password=self.__password)
            except Exception as e:
                print('redis连接失败。。。。')
    
        def get(self,k):
            res = self.r.get(k)
            if res:
                return res.decode()
            return None
        def __close(self):          #私有方法
            print('close')
        def str_set(self,k,v=None):
            if v:
                self.r.set(k,v)
            return None
        def str_delete(self,k):
            #str类型的删除key
            if self.get(k):
                self.r.delete(k)
            else:
                print('redis中没有该key')
        def hash_get(self,Dk,Xk):
            # hash类型获取单个key
            res = self.r.hget(Dk,Xk)
            if res:
                return res.decode()
            return None
        def hash_getall(self,Dk):
            #hash类型获取key里面的所有数据
            res = self.r.hgetall(Dk)
            new = {}
            for k,v in res:
                new[k.decode()] = v.decode()
            return new
    
        def hash_set(self,Dk,Xk,v=None):
            #hash类型set
            if v:
                self.r.hset(Dk,Xk,v)
            return None
        def hash_del(self,Dk,Xk):
            #删除某个hash里面小key
            if self.r.hget(Dk,Xk):
                self.r.hdel(Dk,Xk)
            else:
                print('该key不存在')
    
        def hash_delkey(self,Dk):
            if self.r.hgetall(Dk):
                self.r.delete(Dk)
            else:
                print('该hash key不存在。。。')
        def clean_redis(self):
            #清理redis
            for k in self.r.keys():
                self.r.delete(k)
    
    if __name__ == '__main__':
        my = My()
        my.hash_set('小Baby','毛毛')
        print(my.hash_get('小Baby33','毛毛'))

    这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。

  • 相关阅读:
    [LeetCode]Remove Duplicates from Sorted Array
    二叉树中和为某一值的路径
    机器学习基石笔记:Homework #2 Decision Stump相关习题
    机器学习基石笔记:08 Noise and Error
    机器学习基石笔记:07 The VC Dimension
    机器学习基石笔记:06 Theory of Generalization
    机器学习基石笔记:05 Training versus Testing
    正交矩阵、EVD、SVD
    win10安装ubuntu16.04及后续配置
    chmod命令相关
  • 原文地址:https://www.cnblogs.com/mululu/p/9072799.html
Copyright © 2020-2023  润新知