Python中的继承

本文介绍了面向对象编程中的继承概念,如何定义子类并实例化,以及方法的调用。子类可以继承父类的属性和方法,并能重定义以满足特定需求。此外,还探讨了Python中的私有方法,以两个下划线开头的方法被视为私有,不能从类外部直接调用。文中通过Person和Student类以及Point和Line类的示例来阐述这些概念。
摘要由CSDN通过智能技术生成

继承:

面向对象程序语言的一个重要特点是继承。继承提供了在已存在类的基础上创建新类的方法。继承的子类 拥有被继承的父类的所有方法,在此基础上,子类还可以添加自己的专有方法。继承是类的强有力的特点。一些程序不用继承将会非常复杂,用了继承,写起来就会简单扼要,通俗易懂。另外,通过继承,还可以重新利用以前编写的代码,因为你可以对父类的方法进行定制,而并非一定要修改它们。有时,继承反映了问题的自然结构,这样使程序更容易理解。任何事情都有双重性。继承也有可能使程序变得难以阅读。调用一个方法时,有时很难判断它是在哪定义的。相关的代码可能分散在几个模块中。所以,有些事情利用继承的特点能够做好,不利用继承,也可能做的不错。如果问题的自然结构不倾向于用继承解决,那么就不要用,用了反而不好。

继承的定义:

已经定义了一个父类BaseClass,那么子类的定义方式如下:

class DerivedClass(BaseClass):

子类别的实例化方式没有特别之处。如果要引用子类的某个属性,首先在子类中寻找,没有就去到父类中寻找它的定义,在没有的话,就一直向上找下去,知道找到为止。
方法的寻找方式与属性相同。子类的方法可以重定义父类的方法,要是你觉得父类的方法不能满足要求的话。有时候,子类的方法中可以直接调用父类中的方法,方式如下:

BaseClass.method(self,arguments)


1.
定义一个父类:

>>> class Person:

...     def __init__(self , name = None , age = 1 , sex = "men"):
...         self.name = name;
...         self.age = age;
...         self.sex = sex;
...         
...     def display(self):
...         print "name : %-20s" % self.name;
...         print "age : %-20d" % self.age;
...         print "sex : %-20s" % self.sex;


>>> #紧接着定义了Person的student类
>>> class Student(Person):

...     def __init__(self , name = None , age = 1 , sex = "men" , grade = 0):
...         Person.__init__(self , name , age , sex)
...         self.grade = grade;
...         
...     def display(self):
...         Person.display(self)
...         print "grade : %-20d" % self.grade;

私有方法:

在C++语言中有私有方法的概念,私有方法只能被类的内部方法调用。在Python 中,类的私有方法和私有属性,不能够从类的外面调用。类的方法和属性是公有,还是私有,可以从它的名字判断。如果名字是以两个下划线开始,但并不是以两个下划线结束,则是私有的。其余的都是公有的。请看下面的例子:

>>> import math
>>> class Point:

...     def __init__(self , x = 0 , y = 0):
...         self.x = x;
...         self.y = y;
...         
...     def __str__(self):
...         return '(' + str(self.x) + ',' + str(self.y) + ')';



>>> class Line:

...     def __init__(self , p1 = Point() , p2 = Point()):
...         self.__p1 = p1;
...         self.__p2 = p2;
...         
...     def __str__(self):
...         return str(self.__p1) + str(self.__p2);
...         
...     def __distance(self):
...         tx = math.pow(self.__p1.x,2) + math.pow(self.__p2.x,2);
...         ty = math.pow(self.__p1.y,2) + math.pow(self.__p2.y,2);
...         return math.sqrt(tx+ty);
...         
...     def length(self):
...         print self.__distance();
...         
...     


本次分享到这啦~对你有帮助的话,点个关注再走吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值