我在理解类中的继承方面遇到了一些麻烦,并想知道为什么这些python代码不起作用,有人能告诉我这里出了什么问题吗?
## Animal is-a object
class Animal(object):
def __init__(self, name, sound):
self.implimented = False
self.name = name
self.sound = sound
def speak(self):
if self.implimented == True:
print "Sound: ", self.sound
def animal_name(self):
if self.implimented == True:
print "Name: ", self.name
## Dog is-a Animal
class Dog(Animal):
def __init__(self):
self.implimented = True
name = "Dog"
sound = "Woof"
mark = Dog(Animal)
mark.animal_name()
mark.speak()
这是通过终端的输出
Traceback (most recent call last):
File "/private/var/folders/nd/4r8kqczj19j1yk8n59f1pmp80000gn/T/Cleanup At Startup/ex41-376235301.968.py", line 26, in <module>
mark = Dog(Animal)
TypeError: __init__() takes exactly 1 argument (2 given)
logout
我试图让动物检查动物是否已实施,然后如果是,请从动物继承的类来设置动物然后能够操作的变量。
答案 0 :(得分:6)
katrielalex很好地回答了你的问题,但我也想指出你的课程有点差 - 如果没有错误 - 编码。关于你使用课程的方式似乎很少有误解。
首先,我建议您阅读Python文档以获得基本想法:http://docs.python.org/2/tutorial/classes.html
要创建一个类,只需执行
class Animal:
def __init__(self, name, sound): # class constructor
self.name = name
self.sound = sound
现在您可以通过调用a1 = Animal("Leo The Lion", "Rawr")
左右来创建名称对象。
要继承一个类,你可以:
# Define superclass (Animal) already in the class definition
class Dog(Animal):
# Subclasses can take additional parameters, such as age
def __init__(self, age):
# Use super class' (Animal's) __init__ method to initialize name and sound
# You don't define them separately in the Dog section
super(Dog, self).__init__("Dog", "Woof")
# Normally define attributes that don't belong to super class
self.age = age
现在你可以通过说Dog
来创建一个简单的d1 = Dog(18)
对象而你不需要使用d1 = Dog(Animal)
,你已经告诉班级它的超类是{{1} }在第一行Animal
答案 1 :(得分:5)
要创建一个类的实例
mark = Dog()
不是mark = Dog(Animal)
。
不要这样做implimented
。如果您想要一个无法实例化的类(即必须先进行子类化),请执行
import abc
class Animal(object):
__metaclass__ = abc.ABCMeta
def speak(self):
...
答案 2 :(得分:1)
由于给定示例中的age不是parent(或 base )类的一部分,因此必须实现该函数(在类中称为 method )在继承的类中(也称为派生的类)。
class Dog(Animal):
# Subclasses can take additional parameters, such as age
def __init__(self, age):
... # Implementation can be found in reaction before this one
def give_age( self ):
print self.age