我在网上研究过,但仍然很难理解如何创建类。SoloLearn、DataCamp和其他站点中的示例通常使用Person
/ Employee
示例,如下所示:
class Person:
def __init__(self, first, last):
self.firstname = first
self.lastname = last
def Name(self):
return self.firstname + " " + self.lastname
class Employee(Person):
def __init__(self, first, last, staffnum):
Person.__init__(self,first, last)
self.staffnumber = staffnum
def GetEmployee(self):
return self.Name() + ", " + self.staffnumber
x = Person("Marge", "Simpson")
y = Employee("Homer", "Simpson", "1007")
print(x.Name())
print(y.GetEmployee())
我正在尝试创建一个示例类,它通过稍微修改字典来返回字典。代码如下:
class Place:
def __init__(self, country, province):
self.country= country
self.province = province
def CountryState(self):
return {
'Province': self.province,
'Country': self.country
}
class Location(Place):
def __init__(self, country, province, city, street, postal):
super(Place, self).__init__(country, province, city, street, postal)
self.city = city
self.street = street
self.postal = postal
def GetLocation(self):
return CountryState().update({
'City': self.city,
'Street': self.street,
'Postal': self.postal
})
if __name__=="__main__":
x = Place('United States', "California")
y = Location("United States", "California", "Los Angeles", "Johnson Street", "90007")
print(x.CountryState())
print(y.GetLocation())
我使用pdb.set_trace()
得到一个回溯,如下所示
Traceback (most recent call last):
File "/home/john/Python/class-example.py", line 37, in <module>
y = Location("United States", "California", "Los Angeles", "Johnson Street", "90007")
File "/home/john/Python/class-example.py", line 22, in __init__
super(Place, self).__init__(country, province, city, street, postal)
TypeError: object.__init__() takes no parameters
> /usr/lib/python3.5/idlelib/run.py(370)runcode()
-> jit = self.rpchandler.console.getvar("<<toggle-jit-stack-viewer>>")
pdb
list
365 self.usr_exc_info = sys.exc_info()
366 if quitting:
367 exit()
368 # even print a user code SystemExit exception, continue
369 print_exception()
370 -> jit = self.rpchandler.console.getvar("<<toggle-jit-stack-viewer>>")
371 if jit:
372 self.rpchandler.interp.open_remote_stack_viewer()
373 else:
374 flush_stdout()
375
我还没能让__init__
接受参数。请让我知道我遗漏了什么,这样我就可以从以下行返回字典:
print(x.CountryState())
print(y.GetLocation())
{ 'Country': 'United States', 'State': 'California' }
{ 'Country': 'United States', 'City': 'Los Angeles', 'Street':'Johnson Street', 'Postal Code': '90007'}
发布于 2018-08-19 01:13:30
在您要调用的Location(Place)
类中
super(Place, self).__init__(country, province, city, street, postal)
您应该调用Location
类的超类。现在,您将调用Place
的超类。因为Place
没有声明的超类,所以它派生自object
类(它是所有类的父类),并且您正在调用object
构造函数,该构造函数不带任何参数。
而且,即使你解决了这个问题,你给出的参数也比Place
接受的多。正确的形式应该是
super(Location, self).__init__(country, province)
https://stackoverflow.com/questions/51910868
复制相似问题