乐趣区

关于python:Python中的继承

继承:

面向对象程序语言的一个重要特点是继承。继承提供了在已存在类的根底上创立新类的办法。继承的子类 领有被继承的父类的所有办法, 在此基础上, 子类还能够增加本人的专有办法。继承是类的强有力的特点。一些程序不必继承将会非常复杂, 用了继承, 写起来就会简单扼要, 通俗易懂。另外, 通过继承, 还能够从新利用以前编写的代码, 因为你能够对父类的办法进行定制, 而并非肯定要批改它们。有时, 继承反映了问题的天然构造, 这样使程序更容易了解。任何事件都有双重性。继承也有可能使程序变得难以浏览。调用一个办法时, 有时很难判断它是在哪定义的。相干的代码可能扩散在几个模块中。所以, 有些事件利用继承的特点可能做好, 不利用继承, 也可能做的不错。如果问题的天然构造不偏向于用继承解决, 那么就不要用, 用了反而不好。

继承的定义:

曾经定义了一个父类 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();

 

退出移动版