Python 3中的类:带/不带self
考虑到Python3中不推荐使用未绑定的方法,有人能解释一下这两个类之间的区别吗?如果它们彼此有优势的话?哪一个更好,用于什么目的Python 3中的类:带/不带self,python,class,python-3.x,methods,Python,Class,Python 3.x,Methods,考虑到Python3中不推荐使用未绑定的方法,有人能解释一下这两个类之间的区别吗?如果它们彼此有优势的话?哪一个更好,用于什么目的 #Class Number 1 class SomeClass(): a_cls_attribute = [] def modify_a_cls_attribute(elem): SomeClass.a_cls_attribute.append(elem) def display_a_cls_attribute():
#Class Number 1
class SomeClass():
a_cls_attribute = []
def modify_a_cls_attribute(elem):
SomeClass.a_cls_attribute.append(elem)
def display_a_cls_attribute():
print(SomeClass.a_cls_attribute)
SomeClass.modify_a_cls_attribute('elem')
SomeClass.display_a_cls_attribute()
#Class Number 2
class SomeClass():
def __init__(self):
self.an_inst_attribute = []
def modify_an_inst_attribute(self, elem):
self.an_inst_attribute.append(elem)
def display_an_inst_attribute(self):
print(self.an_inst_attribute)
an_inst = SomeClass()
an_inst.modify_an_inst_attribute('elem')
an_inst.display_an_inst_attribute()
编辑:
在Python2中,类编号1为:
class SomeClass():
a_cls_attribute = []
@classmethod
def modify_a_cls_attribute(cls, elem):
cls.a_cls_attribute.append(elem)
@classmethod
def display_a_cls_attribute(cls):
print(cls.a_cls_attribute)
SomeClass.modify_a_cls_attribute('elem')
SomeClass.display_a_cls_attribute()
为什么要在第一名中使用类?您只是在那里使用名称空间函数。我会用一个模块来代替它。也许是为了构建一个复杂的代码?毕竟,这只是一个伪造的代码。我试图理解使用类属性/方法或实例属性/方法的优点。但是,使用模块可以完成完全相同的事情,而不会打乱人们对类通常用于什么的期望。第二个类不是也一样吗?我的意思是,当然,第二类也可以避开,而选择一个简单的模块。考虑到类1在Python 3中不再是一个语法错误,我只是尝试将类方法与实例方法进行对比。如果需要传递单例管理器,那么创建类实例比创建模块更有帮助,因为它可以更好地记录目的。未绑定与绑定的区别并不是为了启用第一个模式而删除的,而是因为没有什么意义而删除的。