Python 静态方法显示问题



我创建了一个静态方法display()该方法应该在初始化类对象之前显示其内容。但是我的插入函数首先工作,但我觉得从逻辑上讲它应该首先执行 Queue.display...

class Queue(object):
    def __init__(self):
        front = 0
        rear = -1
        list1 = []
        self.front = front
        self.rear = rear
        self.list1 = list1  
    def display(self):
        print "From Display()"
        print "Front stat :", self.front
        print "Rear Stat:", self.rear                    
        display = staticmethod(display)
    def insert(self,x):
         if len(self.list1) > 5:
            print "Queue max"
        else:        
            self.list1.append(x)
            print "Insertion"
            self.rear += 1
            print "list :", self.list1
            Queue.display(self)
    def remove(self, y):
        self.list1.remove(y)
        self.front += 1
        Queue.display(self)
#below command should
#execute first but doesn't 
Queue.display
q = Queue()
q.insert(100)
q.insert(200)
q.insert(300)

当您没有实例化类时,无法使用 self 访问实例。您可以使用访问类实例的类方法,也可以使用静态方法,根本不访问类。如果您真的想在实例化之前显示任何内容,您可能想要的是如下所示的内容。

前部和后部现在是类级别属性。您可以从实例访问它们,就像实例属性一样。当您写入它们时,不会造成任何伤害,它们只会被覆盖该实例,因此它们充当实例的默认值。不过要小心,不要对列表这样做,因为列表是可变类型的,所有更改都会在类属性中结束。另请注意,要调用函数,您需要在末尾添加括号(尝试在末尾附近调用 Queue.display)。

class Queue(object):
    front = 0
    rear = -1
    def __init__(self):
        self.list1 = []
    @classmethod
    def display_default(cls):
        print "From Display()"
        print "Front stat:", cls.front
        print "Rear stat:", cls.rear
    def display(self):
        print "Front stat:", self.front
        print "Rear stat:", self.rear
    def insert(self, x):
        if len(self.list1) > 5:
            print "Queue max"
        else:
            self.list1.append(x)
            print "Insertion"
            self.rear += 1
            print "list:", self.list1
            self.display()
    def remove(self, y):
        self.list1.remove(y)
        self.front += 1
        self.display()
Queue.display_default()
q = Queue()
q.insert(100)
q.insert(200)
q.insert(300)

最新更新