在Python中使用继承
class Animal(object):
def eat(self):
print self.name + " is eating " + self.get_food_type()
class Dog(Animal):
def __init__(self, name):
self.name = name
def get_food_type(self):
return "dog food"
dog = Dog("Brian")
dog.eat()
# Expected output => "Brian is eating dog food"
更新:在上面的例子中,我的子类是从它的超类调用一个方法,而超类中的函数实际上是知道子类方法。我希望能够在Go中实现类似的效果。
我最接近继承的是在Go中嵌入struct。
type Animal struct {
Name string
}
func (a *Animal) Eat() {
fmt.Println(a.Name + " is eating " + a.GetFoodType())
}
type Dog struct {
*Animal
}
func (d *Dog) GetFoodType() string {
return "dog food"
}
func main() {
dog := &Dog{&Animal{"Brian"}}
dog.Eat()
}
# Error => type *Animal has no field or method GetFoodType
为之前的错误道歉,我意识到结构域确实更好地放入Animal
结构中,因为所有动物共享属性名称。但是,我希望在嵌入Animal
结构的不同结构中实现相同方法的不同实现。
答案 0 :(得分:3)
设计你的Go程序以使用合成而不是继承。
在你的例子中,为什么你不希望Animal有一个名字?这将打印:"布莱恩正在吃#34;:
package main
import "fmt"
type Animal struct {
Name string
}
func (a *Animal) Eat() {
fmt.Println(a.Name + " is eating")
}
type Dog struct {
Animal
}
func main() {
dog := &Dog{Animal{"Brian"}}
dog.Eat()
}
你可能会在Go中找到有关成分的this related blog post。