封裝+私有化封裝

  • 封裝


    '''
    面向對象: 封裝,繼承,多態
    1.將屬性和方法封裝到類中
    2.封裝私有屬性:
       在類定義的時候,將屬性私有化,並定義公有的set和get方法。
    封裝私有化屬性:
        1. 對外隱藏屬性,只能在類中訪問屬性
        2. 可以對象私有屬性的賦值和取值起到限制作用
        3. 通過set方法賦值,通過get方法取值
    '''
    
    
    class Person:
        def __init__(self, name, age, gender):
            self.__name = name
            self.__age = age
            self.__gender = gender
    
        def set_age(self, age):
            if 110 > age > 0:
                self.__age = age
            else:
                print('年齡不在正確的範圍內')
    
        def get_age(self):
            return self.__age
    
        def set_name(self, name):
            if len(name) >= 3:
                self.__name = name
            else:
                print('名字格式錯誤')
    
        def get_name(self):
            return self.__name
    
    
    p1 = Person('哈撒給', 2, '男')
    age = p1.get_age()
    print(age)
    
    p1.set_age(200)
    
    age = p1.get_age()
    print(age)
    
    p1.set_name('哈哈撒給')
    name = p1.get_name()
    print(name)
    

     

  • 私有化封裝


    '''
     簡化封裝:
     @property
    
     步驟:
     1. 在類中,先通過@property裝飾原來的get_xxxx方法
       @property
       def a(self):
            pass
    
     2. 在類中,第一步中裝飾的函數名繼續裝飾set,裝飾的set的名字要與get函數的名字一致
        @a.setter
        def a(self,x):
            pass
    
     3. 在對象中使用的時候,就只需要:
         賦值:   對象名.a = 100    ------》就回去找set方法
         取值:   print(對象名.a)    ------》 只要想打印屬性名則獲取調用get方法
    '''
    
    
    class Person:
        def __init__(self, name, age, gender):
            self.__name = name
            self.__age = age
            self.__gender = gender
    
        @property
        def age(self):
            return self.__age
    
        @age.setter
        def age(self, age):  # age參數就是接受等號後面的值
            if 110 > age > 0:
                self.__age = age
            else:
                print('年齡不在正確的範圍內')
    
        def set_name(self, name):
            if len(name) >= 3:
                self.__name = name
            else:
                print('名字格式錯誤')
    
        def get_name(self):
            return self.__name
    
    
    p1 = Person('哈撒給', 2, '男')
    
    # p1.name = '哈哈撒給'
    p1.age = 200  # 調用set方法
    
    print(p1.age)
    

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章