Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x Python/类的方法之间的属性_Python 3.x - Fatal编程技术网

Python 3.x Python/类的方法之间的属性

Python 3.x Python/类的方法之间的属性,python-3.x,Python 3.x,我是Python新手,我正在尝试了解类的方法之间如何管理属性 在下面的示例中,我试图修改方法“regex”中的列表,然后在另一个方法“printsc”中使用它 “regex”部分可以正常工作,但是属性“self.mylist”没有更新,所以当我调用“printsc”时,结果是“None” 我错过了什么?实现这一目标的最佳方式是什么 谢谢你的回答 执行MyClass()时,它会返回一个对象。。您正在对对象调用您的方法。由于要执行两次,因此每次创建一个新对象并在不同对象上调用regex和prints

我是Python新手,我正在尝试了解类的方法之间如何管理属性

在下面的示例中,我试图修改方法“regex”中的列表,然后在另一个方法“printsc”中使用它

“regex”部分可以正常工作,但是属性“self.mylist”没有更新,所以当我调用“printsc”时,结果是“None”

我错过了什么?实现这一目标的最佳方式是什么

谢谢你的回答

执行MyClass()时,它会返回一个对象。。您正在对对象调用您的方法。由于要执行两次,因此每次创建一个新对象并在不同对象上调用regex和printsc时

你应该做的是

myObj = MyClass()
myObj.regex(items)
myObj.printsc()
执行MyClass()时,它将返回一个对象。。您正在对对象调用您的方法。由于要执行两次,因此每次创建一个新对象并在不同对象上调用regex和printsc时

你应该做的是

myObj = MyClass()
myObj.regex(items)
myObj.printsc()

您应该创建类的对象:

a=MyClass()
a、 正则表达式(项目)
a、 printsc()
>>>['IP:192.168.0.1','DNS:hostname1','IP:10.0.1.15','DNS:server.local.fr']

您应该创建类的对象:

a=MyClass()
a、 正则表达式(项目)
a、 printsc()
>>>['IP:192.168.0.1','DNS:hostname1','IP:10.0.1.15','DNS:server.local.fr']

问题在于,当您这样做时:

MyClass().regex(项)
MyClass().printsc()
您正在创建MyClass的两个独立实例,每个实例将具有不同的
.mylist
属性

mylist或mylist都是实例属性,然后这将起作用:

instance=MyClass()
instance.regex(项目)
instance.printsc()
或者,如果您希望跨实例共享.mylist,则应该是 类属性:

class MyClass():
类别列表=无
定义初始化(自):
通过
def正则表达式(自身,项目):
cls=自我分类__
如果cls.class_列表为无:
cls.class_list=[]
对于项目中的项目:
如果重新匹配(r“^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$”,项目):
cls.class_list.append(“IP:+项”)
其他:
cls.class_list.append(“DNS:+项”)
返回cls.class\u列表
def printsc(自我):
#通过`.\uuuu类``实际上是可选的
#读取属性-如果属性不在实例中
#Python将从类中取回它。
#也就是说,下面的行将与“self.class_list”一起使用`
打印(自我分类列表)

通过这种方式,列表在类的不同实例之间保持不变,就像您在示例中尝试做的那样。

问题在于,当您这样做时:

MyClass().regex(项)
MyClass().printsc()
您正在创建MyClass的两个独立实例,每个实例将具有不同的
.mylist
属性

mylist或mylist都是实例属性,然后这将起作用:

instance=MyClass()
instance.regex(项目)
instance.printsc()
或者,如果您希望跨实例共享.mylist,则应该是 类属性:

class MyClass():
类别列表=无
定义初始化(自):
通过
def正则表达式(自身,项目):
cls=自我分类__
如果cls.class_列表为无:
cls.class_list=[]
对于项目中的项目:
如果重新匹配(r“^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$”,项目):
cls.class_list.append(“IP:+项”)
其他:
cls.class_list.append(“DNS:+项”)
返回cls.class\u列表
def printsc(自我):
#通过`.\uuuu类``实际上是可选的
#读取属性-如果属性不在实例中
#Python将从类中取回它。
#也就是说,下面的行将与“self.class_list”一起使用`
打印(自我分类列表)

通过这种方式,该列表会在类的不同实例之间保持不变,就像您在示例中尝试的那样。

非常简单。。。谢谢!;)这么简单。。。谢谢!;)谢谢@jsbueno,跨实例共享列表也很有用谢谢@jsbueno,跨实例共享列表也很有用