面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类

 

而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

 

定义类通过class关键字

 

class Student(object):

    pass

 

class后面跟着的是类名,类名通常大写开头的单词,object表示从哪个类继承的

 

通常,如果没有合适的继承类,就使用object类

 

定义好了类,可以根据类名创建对应的实例,创建实例是通过类名+()实现的:

 

bart = Student()

可以给实例的变量绑定属性

 

bart.name = 'Bart Simpson'

 

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。

 

通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:

 

class Student(object):

    def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!

        self.name = name

        self.score = score

bart = Student('Bart Simpson',59)

 

 

有了__init__方法,在创建实例的时候不能传入空的参数,必须传与之匹配的参数

 

self不需要传,解释器会自动把实例变量带进去

 

和普通函数相比,类中定义的函数只有一点不同,就是第一个参数永远是self,并且调用时候,不用传该参数

 

除此之外,类方法的函数和普通函数没区别,仍然可以用默认参数,可变参数,关键字参数和命名关键字参数 

 

数据封装

 

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

 

在上面的Student类中,每个实例就拥有各自的name和score这些数据。

 

我们可以通过函数来访问这些数据,比如打印一个学生的成绩

def print_score(std):

    print('%s: %s' % (std.name, std.score))

print_score(bart)

 

但是既然Student类本身就有数据,要访问这些数据,就没有必要从外面的函数去访问

 

可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了。

 

这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:

class Student1(object):

    def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!

        self.name = name

        self.score = score

 

 

    def print_score(self):#数据封装

        print('%s: %s' % (self.name, self.score))

Peter = Student1('Peter',99)

Peter.print_score()

 

这样打印的操作都在类的内部定义好,我们只需要知道创建实例的时候给什么参数,然后调用

 

封装的另一个好处是可以给Student类增加新的方法,比如get_grade:

 

class Student2(object):

    def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!

        self.name = name

        self.score = score

 

    def print_score(self):#这是下面数据封装的代码   类的方法

        print('%s: %s' % (self.name, self.score))

 

    def get_grade(self):#给类添加新方法

        if self.score >= 90:

            return 'A'

        elif self.score >=60:

            return 'B'

        else:

            return 'C'

kael = Student2('kael',99)

print(kael.name,kael.get_grade())

 

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类

 

而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

 

定义类通过class关键字

 

class Student(object):

    pass

 

class后面跟着的是类名,类名通常大写开头的单词,object表示从哪个类继承的

 

通常,如果没有合适的继承类,就使用object类

 

定义好了类,可以根据类名创建对应的实例,创建实例是通过类名+()实现的:

 

bart = Student()

可以给实例的变量绑定属性

 

bart.name = 'Bart Simpson'

 

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。

 

通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:

 

class Student(object):

    def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!

        self.name = name

        self.score = score

bart = Student('Bart Simpson',59)

 

 

有了__init__方法,在创建实例的时候不能传入空的参数,必须传与之匹配的参数

 

self不需要传,解释器会自动把实例变量带进去

 

和普通函数相比,类中定义的函数只有一点不同,就是第一个参数永远是self,并且调用时候,不用传该参数

 

除此之外,类方法的函数和普通函数没区别,仍然可以用默认参数,可变参数,关键字参数和命名关键字参数 

 

数据封装

 

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

 

在上面的Student类中,每个实例就拥有各自的name和score这些数据。

 

我们可以通过函数来访问这些数据,比如打印一个学生的成绩

def print_score(std):

    print('%s: %s' % (std.name, std.score))

print_score(bart)

 

但是既然Student类本身就有数据,要访问这些数据,就没有必要从外面的函数去访问

 

可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了。

 

这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:

class Student1(object):

    def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!

        self.name = name

        self.score = score

 

 

    def print_score(self):#数据封装

        print('%s: %s' % (self.name, self.score))

Peter = Student1('Peter',99)

Peter.print_score()

 

这样打印的操作都在类的内部定义好,我们只需要知道创建实例的时候给什么参数,然后调用

 

封装的另一个好处是可以给Student类增加新的方法,比如get_grade:

 

class Student2(object):

    def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!

        self.name = name

        self.score = score

 

    def print_score(self):#这是下面数据封装的代码   类的方法

        print('%s: %s' % (self.name, self.score))

 

    def get_grade(self):#给类添加新方法

        if self.score >= 90:

            return 'A'

        elif self.score >=60:

            return 'B'

        else:

            return 'C'

kael = Student2('kael',99)

print(kael.name,kael.get_grade())