【发布时间】:2014-01-23 19:51:49
【问题描述】:
我正在经历 LPTHW 并且在前 42 (http://learnpythonthehardway.org/book/ex43.html),我认为我对 is-a 和 has-a 概念有很好的掌握,但在学习练习中,他要求我们添加列表和 dicts到类,以使其成为一个更具功能性的脚本。我正在考虑为狗、猫和人或员工的字典添加一个列表,以便存储名称的值,在员工的情况下还有工资。我不知道如何做到这一点并使其发挥作用,有人可以给我一个简短的例子来说明我正在尝试做的事情,我将从那里构建以完成其余部分。谢谢,下面还有代码...
我所了解的快速示例...
class Animal(object):
pass
## Dog is-a Animal
class Dog(Animal):
def __init__(self, name):
##Dog has-a name
self.name = name
self.doglist = []
Dog.doglist.append("Rover")
当我执行上述操作时,我得到一个错误'AttributeError:类型对象'Dog'没有属性doglist。
完整代码:
##Animal is-a object (yes, sort of confusing) look at the extra credit
class Animal(object):
pass
## Dog is-a Animal
class Dog(Animal):
def __init__(self, name):
##Dog has-a name
self.name = name
##Cat is-a animal
class Cat(Animal):
def __init__(self, name):
##Cat has-a name
self.name = name
##Person is-a object
class Person(object):
def __init__(self, name):
##Person has-a name
self.name = name
##Person has-a pet
self.pet = None
##Employee is-a Person
class Employee(Person):
def __init__(self, name, salary):
## not sure what this does
super(Employee, self).__init__(name)
##Person has-a salary
self.salary = salary
##Fish is a class
class Fish(object):
pass
##Salmon is-a fish and is a class
class Salmon(Fish):
pass
##Halibut is-a fish
class Halibut(Fish):
pass
##rover is-a Dog
rover = Dog("Rover")
##satan is-a Cat
satan = Cat("Satan")
##mary is a person
mary = Person("Mary")
##Mary has-a pet named satan
mary.pet = satan
##frank is-a employee that has-a salary of 120,000
frank = Employee("Frank", 120000)
##frank has-a pet rover(dog)
frank.pet = rover
##flipper is-a instance of Fish
flipper = Fish()
##crouse is-a instance of salmon
crouse = Salmon()
##harry is-a instance of Halibut
harry = Halibut()
print frank.pet.name
【问题讨论】:
-
继承的全部意义在于将功能放在它所属的类中,并在所有子类中使用它。为什么不向
Animal添加一个列表,向Person添加一个字典?另外,我不确定你想要什么。此代码是否不起作用或行为异常?它有什么没有在做的吗? -
不,它工作得很好。我确实想向
Animal添加一个列表,向Person添加一个字典,但我不知道如何正确格式化它...例如,我是否只需将self.Animallist = []放入动物中以创建一个列表那里?以及如何附加到该列表?self.Animallist.append = 'randomname'因为我想我试过了,但没用... -
append()是方法而不是属性。使用它list.append(thing_to_append)。因此,如果您使用self.animal_list =[],它将起作用。如果cat是Cat()的一个实例@ 是cat.animal_list.append(cat_thing),那么您需要做的就是cat.animal_list.append(cat_thing) -
谢谢伊恩,我会试一试...啊,所以也许添加
self.Animallist = [],然后使用self.Animallist.append('randomname")?我会试试这个 -
我试过了,但我在这里发现了一些语法错误...请参阅上面我不断收到的错误以及我在原始帖子中放置的示例...我在这里遗漏了一些东西,我我相信它很简单
标签: python list class oop dictionary