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