2017-08-16 65 views
-3

我是OOP的新手,這是我創建Python類的第一步。我試圖讓我的3個變量是私人的,所以只有方法更新信息(強制封裝)。看起來,如果我從我的類中移除setter和getters方法,它對我的​​代碼沒有影響(必須是執行此工作的初始化方法?)。我能做些什麼來改善這一點?謝謝。Python類和封裝方法

編輯 - 我更新了我的代碼並刪除了init。我的吸氣人員現在不工作。

#Instantiate a new Pet Instance. 
    myPet = Pet() 

    #Get input from user. 
    myPet.setName = input("Enter the pet's name: ") 
    myPet.setTypes = input("Enter the pet's type (Dog, Cat, Bird, etc.): ") 
    myPet.setAge = input("Enter the pet's age (in years): ") 
    while myPet.setAge.isalpha(): 
    print() 
    print("Age cannot contain numbers. Try again.") 
    myPet.setAge = input("Enter the pet's age (in years): ") 


    #Call the showPetInfo module using new instanced object. 
    myPet.showPetInfo() 




class Pet: 

    #Fields of the Pet Class. 
    __PetName = "" 
    __PetType = "" 
    __PetAge = "" 


    #Setter methods. 

    def setName(self,name): 
    self.__PetName = name 


    def setTypes(self,types): 
    self.__PetType = types 


    def setAge(self,age): 
    self.__PetAge = age 

    #Getter methods. 
    @property 
    def getName(self): 
    return self.__PetName 

    @property 
    def getType(self): 
    return self.__PetType 

    @property 
    def getAge(self): 
    return self.__PetAge 

    def showPetInfo(self): 
    print("\n \n \n \n") 
    print("Here is your pet's information. Your pet's name is {}, it is a {} and it is {} years old.".format(self.getName,self.getType,self.getAge)) 

main() 
+0

這個問題會更適合要求在HTTPS對象狀態的另一部分://codereview.stackexchange .com/ – Duncan

+2

你通常不需要或想要Python中的getter和setter。你也不應該在課堂上設定這些屬性;只在'__init__'中定義它們。不要使用雙下劃線前綴,除非您完全知道*您正在做什麼(甚至可能不是)。最後,方法名稱的Python風格是'lower_case_with_underscores',而不是'camelCase'。 –

+3

_「如果我從我的類中刪除了setters和getters方法,它對我的​​代碼沒有影響」_因爲你從不使用它們。 –

回答