Python中类的继承代码实例,python继承代码实例
Python中类的继承代码实例,python继承代码实例
相对于C++的继承编写,Python更简洁,而且效率也是很高的,下面编写一个简单Python的继承例子。
复制代码 代码如下:
#!/usr/bin/python
#filename: pyclass.py
class Member:
def __init__(self, name, age):
self.name = name
self.age = age
print 'Member init:%s' % self.name
def tell(self):
print 'Name:%s,Age:%d' % (self.name, self.age),
class Student(Member):
def __init__(self, name, age, marks):
Member.__init__(self, name, age)
self.marks = marks
print 'Student init:%s' % self.name
def tell(self):
Member.tell(self)
print 'Marks:%d' % self.marks
class Teacher(Member):
def __init__(self, name, age, salary):
Member.__init__(self, name, age)
self.salary = salary
print 'Teacher init:%s' % self.name
def tell(self):
Member.tell(self)
print 'Salary:%d' % self.salary
s = Student('Tom', 20, 80)
t = Teacher('Mrs.Huang', 30, 50000)
members = [s, t]
for mem in members:
mem.tell()
运行效果:
复制代码 代码如下:
[root@localhost hhl]# python pyclass.py
Member init:Tom
Student init:Tom
Member init:Mrs.Huang
Teacher init:Mrs.Huang
Name:Tom,Age:20 Marks:80
Name:Mrs.Huang,Age:30 Salary:50000
我们同样编写同样效果的C++例子:
复制代码 代码如下:
//filename: class.cpp
#include <string.h>
#include <iostream>
using namespace std;
class Member
{
public:
Member(char *n, int a);
void tell();
private:
char name[10];
int age;
};
Member::Member(char *n, int a)
{
memcpy(name, n, sizeof(name));
age = a;
cout<<"Member init:"<<name<<endl;
}
void Member::tell()
{
cout<<"Name:"<<name<<","<<"Age:"<<age<<",";
}
class Student:public Member
{
public:
Student(char *n, int a, int m);
void tell_s();
private:
int marks;
};
Student::Student(char *n, int a, int m):Member(n, a)
{
marks = m;
cout<<"Student init:"<<n<<endl;
}
void Student::tell_s()
{
Member::tell();
cout<<"Marks:"<<marks<<endl;
}
class Teacher:public Member
{
public:
Teacher(char *n, int a, int s);
void tell_t();
private:
int salary;
};
Teacher::Teacher(char *n, int a, int s):Member(n, a)
{
salary = s;
cout<<"Teacher init:"<<n<<endl;
}
void Teacher::tell_t()
{
Member::tell();
cout<<"Salary:"<<salary<<endl;
}
int main(void)
{
Student s("Tom", 20, 80);
Teacher t("Mrs.Huang", 30, 50000);
s.tell_s();
t.tell_t();
return 0;
}
运行效果:
复制代码 代码如下:
[root@localhost hhl]# ./class
Member init:Tom
Student init:Tom
Member init:Mrs.Huang
Teacher init:Mrs.Huang
Name:Tom,Age:20,Marks:80
Name:Mrs.Huang,Age:30,Salary:50000
这两者的运行效果是一样的,但是python更简洁些。。。
一个通用的例子是:
已经有一个类,叫做鸟
其有飞的方法/函数
然后你另外实现了一个 麻雀的 类
如果没有类的继承
那么你就要:
先去实现 飞的方法
然后再单独实现 麻雀 所具体的其他方法(和属性)
而此类似于 飞 的这个方法,很明显,是各种鸟都具有的,通用的方法
所以,为了避免,每一个其他的,某个鸟,都去分别实现一遍这样的方法
所以,弄了个基类,即基本的类,主要的类
其实现一些大家所共有的,通用的东西
包括很多方法 很多属性
然后其他子类
集成了此基类后
就不用再啰嗦地,重复地,去重新实现一遍那些基本的方法和属性了。
只需要实现自己的类本身的特有的东西 就可以了。
不知道你看懂没。
感兴趣的,去看我总结的:
【整理】面向对象的基础知识:类Class,对象(Object),实例(Instance)
(此处不给贴地址,只能靠你自己用google搜帖子标题,就可以找到帖子的地址了)
Python中对应于虚拟类的概念是抽象基类(ABC),一般类的话没有必须重写的东西。
评论关闭