Python 3中的类:带/不带self

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():

考虑到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():
        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中不再是一个语法错误,我只是尝试将类方法与实例方法进行对比。如果需要传递单例管理器,那么创建类实例比创建模块更有帮助,因为它可以更好地记录目的。未绑定与绑定的区别并不是为了启用第一个模式而删除的,而是因为没有什么意义而删除的。