Python静态方法显示问题

时间:2015-02-03 11:21:24

标签: python-2.7

我创建了一个静态方法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)

1 个答案:

答案 0 :(得分:0)

当您没有实例化类时,您无法使用self访问实例。您可以拥有classmethods,访问类实例或静态方法,根本不访问任何类。你可能想要的,如果你真的想在实例化之前显示任何东西,就像下面这样。

前后都是类级属性。您可以从实例访问它们,就像实例属性一样。当您写入它们时,不会造成任何伤害,它们只会覆盖该实例,因此它们将作为实例的默认值。但是要小心,不要使用list,因为list是可变类型的,所有更改都会在class属性中结束。另请注意,要调用函数,您需要在末尾添加括号(在结尾处尝试调用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)