【发布时间】:2017-08-16 08:40:41
【问题描述】:
我是 OOP 新手,这是我第一次尝试创建 Python 类。我试图将我的 3 个变量设为私有,以便只有方法更新信息(强制封装)。似乎如果我从我的类中删除 setter 和 getters 方法,它对我的代码没有影响(必须是初始化方法完成工作?)。我能做些什么来改善这一点?谢谢。
编辑- 我更新了我的代码并删除了 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()
【问题讨论】:
-
这个问题在codereview.stackexchange.com上问更合适
-
您通常不需要或不想要 Python 中的 getter 和 setter。您也不应该在类级别设置这些属性;仅在
__init__中定义它们。不要使用双下划线前缀,除非您确切地知道自己在做什么(甚至可能不知道)。最后,方法名称的 Python 样式是lower_case_with_underscores,而不是camelCase。 -
“如果我从我的类中删除 setter 和 getters 方法,它对我的代码没有影响” 因为你从不使用它们。
-
您的代码不会调用 getter 和 getter 那么您为什么希望它们对其产生任何影响?它们只是死代码。
-
我已经更新了我的代码,但它不起作用。作业要求我使用 3 个 set 方法来存储 3 个值,并使用 3 个 get 方法来返回 3 个值。
标签: python class object methods