相关疑难解决方法(0)

Python中的继承点是什么?

假设您有以下情况

#include <iostream>

class Animal {
public:
    virtual void speak() = 0;
};

class Dog : public Animal {
    void speak() { std::cout << "woff!" <<std::endl; }
};

class Cat : public Animal {
    void speak() { std::cout << "meow!" <<std::endl; }
};

void makeSpeak(Animal &a) {
    a.speak();
}

int main() {
    Dog d;
    Cat c;
    makeSpeak(d);
    makeSpeak(c);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,makeSpeak是一个接受通用Animal对象的例程.在这种情况下,Animal非常类似于Java接口,因为它只包含一个纯虚方法.makeSpeak不知道它传递的Animal的性质.它只是发送信号"speak"并留下后期绑定来处理调用哪种方法:Cat :: speak()或Dog :: speak().这意味着,就makeSpeak而言,实际传递哪个子类的知识是无关紧要的.

但是Python呢?让我们看看Python中相同案例的代码.请注意,我尝试尽可能与C++案例尽可能相似:

class Animal(object):
    def speak(self):
        raise NotImplementedError()

class Dog(Animal):
    def speak(self):
        print "woff!"

class Cat(Animal):
    def …
Run Code Online (Sandbox Code Playgroud)

python oop inheritance

80
推荐指数
7
解决办法
2万
查看次数

将对象从基类转换为子类是否有效

在我的应用程序中,我(如在许多其他应用程序中)一个被称为Contact任何人的实体.在最基本的层面上,这用于表示业务联系人.但是,它也可以用来代表公司的员工.并且还有一些特殊类型的员工(比方说有一个叫Manager)

我试图将其建模为一种有意义的继承关系.员工的姓名和地址就像联系人一样,以及一些与就业相关的属性.经理还拥有许多经理特定的属性.

当员工晋升为经理时,困难就出现了.可以将基类Employee转换为继承类Manager吗?感觉不对.我想我会用一个专门的构造函数来做Manager.

顺便说一句,NHibernate是否支持这种行为?是获得员工,从员工创建经理,然后保存经理这么简单吗?

nhibernate inheritance

13
推荐指数
2
解决办法
1536
查看次数

面向对象的编程不仅仅是方法?

我对OOP的理解非常有限.

我已经在.Net中编程了一年左右,但我完全是自学成才,所以我对OOP细节的一些使用感到失望.

封装,继承,抽象等我知道它们的含义(表面上看),但它们的用途是什么?

我只使用OOP将可重用代码放入方法中,但我知道我错过了很多功能.

甚至班级 - 我只做了两到三次实际班级.相反,我通常只使用MainForm包含所有方法.

oop

5
推荐指数
1
解决办法
1128
查看次数

标签 统计

inheritance ×2

oop ×2

nhibernate ×1

python ×1