类__init__()需要2个参数(给了1个)
我正在学习Python中的类。运行了两个例子,这两个例子里的函数都有两个参数(其中一个是给定的),但是只有一个例子能执行,另一个却不能。
这个例子能执行,尽管x.setdata()
只有一个参数。
class FirstClass:
def setdata(self,value):
self.data=value
def display(self):
print(self.data)
#make two instances
x=FirstClass()
y=FirstClass()
x.setdata("king arthur") #call methods: self is x??
y.setdata(3.31212)
x.display()
y.display()
这个例子却无法运行,错误信息是msg: __init__() takes exactly 2 arguments (1 given)
:
class Heap:
def __init__(self, sorting_key):
"""Initializes a new instance of a heap.
Args:
sorting_key: Specifies the attribute of the object inserted
into the heap, on the basis of which the heap was created.
"""
self.heap = list()
self.mapping = dict()
self.sorting_key = sorting_key
def heapify_up(self, child):
"""Standard heapify operation, as described in CLRS.
Works by swapping the element originially at index child in the heap
with its parent until the heap property is satisfied. Modifies the
appropriate heap attribute
Args:
child: Index of the element that violates the heap property
Returns:
None
"""
parent = (child - 1) / 2
# Swaps the element originally at the index child with its parent
# until the value of the specifed attribute of the parent is greater
# than the value of the specified attribute of the element itself
while (getattr(self.heap[parent], self.sorting_key) <
getattr(self.heap[child], self.sorting_key)):
if (parent == -1):
# This means child was 0, which means we have reached the
# top of the heap
return
# Swap the mappings as well to ensure that future references in
# the mapping dict refer to the correct position of the object in
# the heap
self.mapping[self.heap[parent].player] = child
self.mapping[self.heap[child].player] = parent
# Swap the parent and the child
temp = self.heap[parent]
self.heap[parent] = self.heap[child]
self.heap[child] = temp
# Move the child and parent pointers up the heap
child = parent
parent = (child - 1) / 2
x=Heap()
x.__init__([42,32,54,1,3])
x.heapify_up(l,5)
print x
1 个回答
4
这两行:
x=Heap()
x.__init__([42,32,54,1,3])
应该合并成一行:
x=Heap([42,32,54,1,3])
记住,当你执行 Heap()
时,Heap.__init__
会自动被调用。下面是一个演示:
>>> class Foo:
... def __init__(self):
... print("Foo.__init__ was called")
...
>>> Foo()
Foo.__init__ was called
<__main__.Foo object at 0x020AF030>
>>>