python 面向对象编程

如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student这种数据类型被视为一个对象。

这个对象拥有name和score这两个属性(Property)。

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def print_score(self):
        print '%s: %s' % (self.name, self.score)

a=Student('a','b')
print a
print type(a)
print a.print_score()

class Student(object):
    pass

class 后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),


表示该类从哪个类继承下来的,如果没有合适的继承类,就使用object类

注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身


数据封装:

面向对象编程的一个重要特点就是数据封装,

访问限制:

在class内部,可以有属性和方法,而外部代码可以通过直接调用变量的方法来操作数据,


但是,从前面Student的定义来看,外部代码还是可以自由地修改一个实例的name,score属性

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def print_score(self):
        print '%s: %s' % (self.name, self.score)


bart = Student('Bart Simpson', 98)
print bart
print bart.name
print  bart.score
bart.score = 59
print bart.score

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a19.py
<__main__.Student object at 0x02556350>
Bart Simpson
98
59

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__.

在Python中,实例的变量如果以__开头,就变成了一个私有变量,只有内部可以访问,外部不能访问。


继承和多态:

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。


当我么需要编写Dog和Cat类时,就可以直接从Animal类继承:

class Animal(object):
    def run(self):
        print 'Animal is running...'
class Dog(Animal):
    pass
a=Dog()
print a
print type(a)
print a.run()

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a19.py
<__main__.Dog object at 0x02587E30>
<class '__main__.Dog'>
Animal is running...
None

对于Dog来说,Animal就是它的父类,对于Animal来说,Dog就是它的子类。Cat和Dog类似。


class Animal(object):
    def run(self):
        print 'Animal is running...'
class Dog(Animal):
    def run(self):
        print 'Dog is running...'
a=Dog()
print a
print type(a)
print a.run()

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a19.py
<__main__.Dog object at 0x02646310>
<class '__main__.Dog'>
Dog is running...
None


当子类和父类都存在相同的run()方法时,我们说,子类run()覆盖了父类的run()


要理解什么是多态,我们首先要对数据类型再作一点说明,当

我们定义一个class的时候,我们实际上就定义了一种数据类型。

我们定义的数据类型和Python自带的数据类型没什么两样:

原文地址:https://www.cnblogs.com/hzcya1995/p/13349444.html