面向对象的思想理解

2018.03.09
AUTHOR: wills

面向对象编程

一切事物都是对象(不管抽象还是具体)

类有静态属性,动态特征

STEP 1. 定义类

类是对象的蓝图和模板,有了类就可以创建对象
定义类需要做两件事:数据抽象 and 行为抽象

数据抽象 – 抽取对象共同的静态特征(名词)–》它表示对象的某种属性

行为抽象 – 抽取对象共同的动态特征(动词)–》 它表示对象的某种方法

定义类关键字 - - - class – 类名要求首字母大写(驼峰命名法)

我们定义一个类实际就是把数据属性和操作数据的函数绑定在一起
形成一个逻辑整体,即对象,将来任何时候要使用这种对象时复用
这个类就好了

class Student(object):
    # 构造方法(又叫构造器/构造子  - constractor)
    def __init__(self,name,age):
        # 在这里给对象绑定属性
        self.name = name
        self._age = age

    # 我们定义一个方法就代表,对象可以接收这个消息
    # 对象的方法(函数)的第一个参数都是统一写成**self**(c++里面同样写法的是this)
    # self代表了接收消息的对象 --即可以写成   对象.消息   的形式
    def study(self,course):
        return '%s is studing %s...' % (self.name,course)

    def __str__(self):
        return 'name= %s,age=%d' % (self.name,self._age)


stu1 = Student('wills',15)
print(stu1)
print(stu1.study('math'))

在上面一段代码中,Student表示类名,而stu1表示一个实际的对象.
stu1对象有自己的名字属性‘wills’,以及自己的年龄属性‘age’,还有自己的行为study()函数
在c++语言中还有private和public,protected关键字,表示属性或者函数是否允许外界调用或者继承,python里面
没有这种关键字,不过可以像self._age一样在加一个下划线表示保护,这里我也理解不是很清楚,
究竟python是怎么实现保护的,现在我只是知道了有这种用法。

STEP 2 . 调用构造方法构造学生对象

实际上是调用的Student类中的init(self,*args)方法实现的


......

stu1 = Student('wills',15)
print(stu1.study('math'))

STEP 3 . 给对象发消息

通过给对象发消息,从而让对象完成某种工作

解决任何问题都是通过给对象发消息,然后让对象去完成

这就是面向对象的思想,让对象来做事

所有有了这个思想后,在我的理解里面,有相同属性和行为的对象就可以构成一个类
至于先有类还是先有对象,我认为应该是先有对象,因为我们解决问题不管过程如何,最终结果
都是对象去执行完成的。之所以要定义类,只是为了方便把这些有相同属性的对象放在一起,如果出现了
同样的问题,就可以不用重新想办法,以前这个类的对象怎么干的,现在也怎么干就好了

class Student(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def study(self,course):
        return '%s is studing %s...' % (self.name,course)

    def __str__(self):
        return 'name= %s,age=%d' % (self.name,self.age)


stu1 = Student('wills',15)
print(stu1)
print(stu1.study('math'))
name= wills,age=15
wills is studing math...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章