在今天的讲座中,我们开始研究Python中的子类。例如,我们得到的代码类似于一个非常基本的社交网络,如下所示:
class socialNetwork:
class node:
def __init__(self, name, friendList):
self.name=name
self.friendList=friendList
def __init__(self):
self.nodeList=[]
def addPerson(self, name, friendList):
person=self.node(name,friendList)
self.nodeList.append(person)
s = socialNetwork()
s.addPerson("John",["Alice","Bob"])
s.addPerson("Alice",["John","Bob","Jeff"])
s.addPerson("Bob",["John","Alice","Jeff","Ken"])
s.addPerson("Jeff",["Alice","Bob","Barbra"])
s.addPerson("Ken",["Bob","Barbra"])
s.addPerson("Barbra",["Jeff","Ken"])
for person in s.nodeList:
print("name: ",person.name, "\n\t friends: ",person.friendList)
但是,每当我尝试运行此程序时,都会收到以下消息:
Traceback (most recent call last):
** IDLE Internal Exception:
File "C:\Users\Mike\AppData\Local\Programs\Python\Python36-
32\lib\idlelib\run.py", line 460, in runcode
exec(code, self.locals)
File "C:/Users/Mike/AppData/Local/Programs/Python/Python36-32/run.py",
line 15, in <module>
s.addPerson("John",["Alice","Bob"])
AttributeError: 'socialNetwork' object has no attribute 'addPerson'
简单地说,我不知道为什么我会遇到这个错误,特别是在教授很好地运行了相同的代码之后。我漏了什么吗?如果漏了,有人能指出吗?你知道吗
首先,
node
不是socialNetwork
的子类,而是嵌套在后者中的类。 其次,socialNetwork
实际上没有属性addPerson
,但是socialNetwork.node
有属性。你知道吗类没有
addPerson
方法,因为类的缩进方式不对。应该是这样的:缩进在
python
中确实很重要。出现问题的一个线索是您在同一级别上有两个__init__
方法。你知道吗你还没有定义任何子类。在Python中,通过将父类放在括号中来指定继承,例如:
“Network”和“Node”作为子类并没有什么意义,但其中一个应该是另一个的composed。你知道吗
您所做的是定义一个具有一个属性的类
socialNetwork
,一个名为node
的类。这就是为什么会得到AttributeError
,因为socialNetwork
中没有addPerson
属性。你知道吗相关问题 更多 >
编程相关推荐