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