Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类中使用私有变量创建列表_Python_List_Class_Oop_Getter Setter - Fatal编程技术网

Python 在类中使用私有变量创建列表

Python 在类中使用私有变量创建列表,python,list,class,oop,getter-setter,Python,List,Class,Oop,Getter Setter,我正在创建一个名为Pet的类。我将我的变量设置为私有,这样就没有人可以修改它们(确保封装)。我想使用私有变量创建一个列表。 然后我希望能够在类外调用我的pet\u listlist,我将在以后使用它(我是否需要在pet类内为我的列表创建一个getter来执行此操作?) 我是python新手,但我正在尝试使用面向对象的原则编写代码 这是到目前为止我的代码。 我在想,因为我的pet变量是私有的,我需要使用setter来设置列表中的pets?但是,当我想打印set_pet()缺少1个必需的位置参数:“

我正在创建一个名为
Pet
的类。我将我的变量设置为私有,这样就没有人可以修改它们(确保封装)。我想使用私有变量创建一个列表。 然后我希望能够在类外调用我的
pet\u list
list,我将在以后使用它(我是否需要在
pet
类内为我的列表创建一个getter来执行此操作?)

我是python新手,但我正在尝试使用面向对象的原则编写代码

这是到目前为止我的代码。 我在想,因为我的
pet
变量是私有的,我需要使用setter来设置列表中的
pet
s?但是,当我想打印
set_pet()缺少1个必需的位置参数:“pet”
时,会出现此错误

class Pet:
      def __init__(self, pet ):
          self.pet = pet

      def set_pet(self, pet):
         self.__pet = pet

      def get_pet(self):
         return self.__pet


#creating list

pet_list = []

p = Pet

pet_list.append(p.set_pet("cat"))
pet_list.append( Pet("dogs"))
pet_list.append( Pet("fish"))
pet_list.append( Pet("horses"))
pet_list.append( Pet("birds"))

for obj in pet_list:
    print(obj.pet)

问题出在
p=Pet
。在这里,您没有初始化类的实例
Pet
,而是将
p
设置为与该类相等。改用

p = Pet("The pet you want")
您之所以得到error
set_pet()缺少1个必需的位置参数:“pet”
是因为
“cat”
被作为位置参数传递,而不是
self
,因此就好像您只传递了1个参数一样


另外,
pet\u list.append(p.set\u pet(“cat”))
会将
None
追加到列表中,因为您只设置属性,不返回任何内容,所有其他的都会正常工作。

p=pet(“cat”)
p=Pet
只是给你一个类的别名。现在还不清楚为什么你要创建一个不同于列表中其他人的。最后还需要
get_pet
(或者阅读关于
@property
)的内容。不,这不是创建实例-您需要括号来调用类以获取实例。是的,我现在明白了!我将代码更改为您所说的,现在可以使用了,谢谢:)