Python - 从其他类中检索数据

时间:2013-12-14 23:58:21

标签: python

我有两个课程,我需要能够彼此交谈,主要是从另一个人那里获取数据。我省略了一切不需要的东西。

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函数呢?

2 个答案:

答案 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。想想你正在处理的物体的物理现实。您有dogshelter。庇护所如何与狗相互作用?

最简单的方法是在那里放一个。所以写那个方法。让我们为您的住所提供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,其中包含Nonedog。我们现在写下你的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了解所有血腥细节。 :)