五、オブジェクト指向のPythonの8、およびパッケージングを隠します

8、パッケージを隠します

隠しモードでのPython:名前は二重のアンダースコアで始まります

class Item:
    def __init__(self):
        self.__name = '电子产品'
        
im = Item()
print(im.__name)
AttributeError: 'Item' object has no attribute '__name'

分析:皮革に直接アクセスすることはできません後。

隠された自然:Pythonは「密かに」メンバーの名前の変更は二重下線で始まり、下線とメンバー名の前に単一のクラス名を追加します(この方法で呼び出すことができる「非表示」のメンバーが、推奨されません)します。

print(im._Item__name)
电子产品

例:

class User:
    
    # 构造方法中检查赋值
    def __init__(self, name='Noname', passwd='default'):
        if isinstance(name, str) and 4<=len(name)<=8:
            self.__name = name
        else:
            print('用户名无效,未成功设置')
            self.__name = 'Noname'
        if isinstance(passwd, str) and 6<=len(passwd)<=12:
            self.__passwd = passwd
        else:
            print('密码无效,未成功设置')   
            self.__passwd = 'default'
    
    def getname(self):
        return self.__name
    # 检查用户名赋值,避免传入无效的值
    def setname(self, name):
        if isinstance(name, str) and 4<=len(name)<=8:
            self.__name = name
        else:
            print('用户名无效,未成功设置')   
    name = property(fget=getname, fset=setname)
    
    def getpasswd(self):
        return self.__passwd  
    # 检查密码赋值,避免传入无效的值
    def setpasswd(self, passwd):
        if isinstance(passwd, str) and 6<=len(passwd)<=12:
            self.__passwd = passwd
        else:
            print('密码无效,未成功设置')
    passwd = property(fget=getpasswd, fset=setpasswd)
u = User('py','1')
print('-'*30)

print(u.name, u.passwd)
用户名无效,未成功设置
密码无效,未成功设置
------------------------------
Noname default
u = User('python','123456')
print('-'*30)

print(u.name, u.passwd)
------------------------------
python 123456
u.name = 'j'
print('-'*30)

print(u.name)
用户名无效,未成功设置
------------------------------
python
u.name = 'java'
print('-'*30)

print(u.name)
------------------------------
java

分析:パッケージを使用しない場合、u.nameとu.passwdは、パッケージの内容のいずれかの使用に割り当てることができ、u.nameはわずか4〜8ビット文字列に設定され、u.passwdのみ12に6に設定します文字列。

おすすめ

転載: blog.csdn.net/qq_36512295/article/details/94548198