学习笔记(11):21天通关Python(仅视频课)-隐藏与封装

立即学习:https://edu.csdn.net/course/play/24797/282191?utm_source=blogtoedu

python并未提供真正的隐藏机制,python类中所有默认成员都是公开的。

若需要隐藏某些成员,将它们命名为以双下划线开头即可。其实也依然可通过加“下划线加类名”前缀赖调用被隐藏的成员

class Test:
    def __init__(self, name='admin', passwd='password'):
        if Test.checkPw(self, passwd) and Test.checkNm(self, name):
            self.__name = name
            self.__passwd = passwd
        else:
            print('输入无效')
            exit()

    def getPw(self):
        return self.__passwd

    @property
    def name(self):
        return self.__name

    def setPw(self, passwd):
        if Test.checkPw(self, passwd):
            self.__passwd = passwd
        else:
            print('password格式不对')
            exit()

    @name.setter
    def name(self, name):
        if Test.checkNm(self, name):
            self.__name = name
        else:
            print('name格式不对')
            exit()

    def checkNm(self, name):
        if isinstance(name, str) and 4 <= name.__len__() <= 8:
            return True
        else:
            return False

    def checkPw(self, passwd):
        if isinstance(passwd, str) and 6 <= passwd.__len__() <= 10:
            return True
        else:
            return False

        # name = property(fget=getNm, fset=setNm)

    passwd = property(fget=getPw, fset=setPw)

t = Test()
inm = input("请输入用户名_____")
# t.name = 'hello'
# t.passwd = 'word'
t.name = inm
ipw = input('请输出密码_______')
t.passwd = ipw
print(t._Test__name,t._Test__passwd)
print(t.name, t.passwd)
发布了25 篇原创文章 · 获赞 4 · 访问量 605

猜你喜欢

转载自blog.csdn.net/happyk213/article/details/105186248
今日推荐