面向对象(二)

类的特性详解

  一 类的封装

  封装就是将数据(类属性)和函数(类方法)集合成一个整体,即类。

  封装的目的是增强安全性和简化编程,使用者不需了解具体的实现细节,只需要通过外部调用

1 class dog(object):
2 #     "dog class"
3     def __init__(self, name):
4         self.name = name#定义类普通属性
5     def talk(self,age): # 定义类方法
6         print("I am a dog ,my name is %s,my age is %s" %(self.name,age))
7 
8 d = dog("zhangsan") # 先对类进行实例化。"zhangsan"这个参数是传入的参数,必须传
9 d.talk(18) # 调用类方法,18为外部参数,是类方法talk需要的,必须传 

  二 类的继承

  1 概述。

  继承能够使用父类的所有功能,并在无需重新编写原有类的情况下对这些功能进行扩展。

  通过继承创建的新类称为:“子类”或“派生类”,被继承的类称为:"基类",“父类”或“超类”,继承的过程,就是从一般到特殊的过程。一般情况下,一个字类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

  继承的实现方式有:实现继承、接口继承。

  a 实现继承是指使用基类的属性和方法而无需额外编码的能力。

  b 接口继承是指仅用舒心个方法的名称,但是子类必须提供实现的能力即子类重构父类的方法。

  面向对象发开范式大致为:划分对象 -> 抽象类->将类组织为层次化结构(继承和合成)->用类与实例进行设计和实现等阶段。

  2 类的继承

 1 class Person(object):
 2     def talk(self):
 3         print("person is talking.....")
 4 class BlackPerson(Person):#继承一个父类
 5     def walk(self):
 6         print("BlackPerson is walking ....")
 7 b = BlackPerson()
 8 b.talk() #由于继承了父类,所以talk方法可以被调用
 9 b.walk() #调用自身方法
10 #输出
11 person is talking.....
12 BlackPerson is walking ....

  3 构造方法的继承

  子类有自己的属性,但是又想继承父类的属性,所以需要先继承,再重构。

  继承类的构造方法有两种:

  1 经典类写法:父类.__init__(self.name,age)

  2 新式类写法:super(子类,self).__init__(name,age)

  注意:在py3中,都使用的是新式类的写法。在py2中,1、2两种都有

class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.sex = "normal"
    def talk(self):
        print("person is talking.....")
class BlackPerson(Person):#继承一个父类
    def __init__(self,name,age,strength):#定义时,需传入父类的属性名
        Person.__init__(self,name,age) #继承父类的构造方法,也可以为super(BlackPerson,self).__init__(name,age)
        self.strength = strength
        print(self.name,self.age,self.strength,self.sex)
    def walk(self):
        print("BlackPerson is walking ....")
b = BlackPerson("zhangsan",18,"strength")
b.talk() #由于继承了父类,所以talk方法可以被调用
b.walk() #调用自身方法
#zhangsan 18 strength normal
person is talking.....
BlackPerson is walking ....

  3 类的重写

class Person(object):
    def talk(self):
        print("person is talking.....")
class BlackPerson(Person):#继承一个父类
    def talk(self):#重写父类talk方法
        print("BlackPerson is walking ....")
b = BlackPerson()
b.talk() 
#输出
BlackPerson is walking ....

  重写条件:

  1 重写方法的方法名必须和父类中被重写的方法名一模一样

  2 重写方法的传入的参数和参数的个数必须和父类中被重写的方法一样

  根据上述条件来看,上面的类的重写就不对,只是在类中添加了一个类的方法,同名而已。

class Person(object):
    def eat(self,food):
        print("person is eat food".format(food))
class BlackPerson(Person):#继承一个父类
    def eat(self,food):#重写父类方法(方法名、传入的参数以及参数的个数和父类是一样)
        print("BlackPerson is eat food".format(food))
b = BlackPerson()
b.talk("meat")
# 输出
BlackPerson is eat food

 

  三 多态

  

  

 

 

 

 

 

 

 

 

 

 

  

posted @ 2017-07-05 17:07  会开车的好厨师  阅读(89)  评论(0)    收藏  举报