我有两个课程,我需要能够彼此交谈,主要是从另一个人那里获取数据。我省略了一切不需要的东西。
class dog(object):
def __init__(self,name):
self.name = name
def getOwner(self):
return self.name
class shelter(object):
def getName(self,dogName):
return dogName.getName()
doggy = dog("Rover")
animalHouse = shelter()
print animalHouse.getName("rover")
唯一返回的是AttributeError: 'shelter' object has no attribute 'getName'
那么如何在shelter类中使用dog类中的getName函数呢?
答案 0 :(得分:1)
您没有指定getName
功能。我想你想在getName
类中声明getOwner
而不是dog
,你需要将dog
的实例传递给函数。
class dog(object):
def __init__(self,name):
self.name = name
def getOwner(self):
return self.name
class shelter(object):
def getName(self,dogName):
return dogName.getOwner()
doggy = dog("Rover")
animalHouse = shelter()
最后:
#Pass the instance!
print animalHouse.getName(doggy)
答案 1 :(得分:0)
你的方法真的不是OOP。 shelter
有什么意义?您可以直接在getOwner
实例上调用doggy
。想想你正在处理的物体的物理现实。您有dog
和shelter
。庇护所如何与狗相互作用?
最简单的方法是在那里放一个。所以写那个方法。让我们为您的住所提供resident
属性:
def put(self,dog):
self.resident = dog
现在,最好让shelter
始终定义该属性,所以让我们在初始化程序中执行此操作:
def __init__(self):
self.resident = None
当我们在这里时,让我们自己有能力在我们创建避难所时指定居民:
def __init__(self,dog=None):
self.resident = dog
这是利用python的“默认属性”功能。您可以指定该参数;如果不这样做,则默认为None
。如果这令人困惑,您可以跳过此步骤。
考虑到所有这些(并且put
中有dog
),现在我们有一个shelter
,其中包含None
或dog
。我们现在写下你的getName
方法。
def getName(self):
if self.resident:
return self.resident.getOwner() #this method is questionably named, but you wrote it
else:
return 'nobody home!'
其他注释:您的类应该以大写字母开头命名,并且您的方法应该使用下划线来分隔单词而不是使用mixedCase。所以该类为Shelter
,方法为get_name
。这是根据python命名约定,请参阅PEP 8了解所有血腥细节。 :)