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