Python面向对象编程(OOP)导论

面向对象编程(OOP)导论

面向对象编程是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向对象编程最核心的思想就是类的概念,面向对象的三大特点就是:数据封装,继承,派生.
在面向对象编程当中,我们可以给用户提供相应的接口函数(API),不仅保证了代码的安全性封装性,也减少了用户的开发流程。

1. 类(Class)和实例(Instance)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'A Class example'
__author__ = 'xu chao'


class Student(object): # 这里类后面加上了一个object表示继承关系,如果没有继承就写object,这是元类
    def __init__(self, name, grade): # 注意init前后都有二个下划线,第一个参数是self, 后面是传进来的形参
        self.name = name # self.name,self.grade为成员变量
        self.grade = grade

    def print_value(self): # 每一个函数第一个参数都是self
        print('name=%s, grade=%s'%(self.name, self.grade))

student1 = Student('xuchao', 99) # 进行调用成员函数
student1.print_value()
  • 类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;
    方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;

通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。
和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同。

2.访问控制

在上面写的程序当中,我们是可以直接取到self.name,或者对self.name进行操作,也就是说,这些成员变量对于用户来说访问权限是公有的(这点和C++不同,C++中默认成员变量和成员函数是私有的)。

问题:如何将对成员变量的访问权限变成私有的了?

我们可以使用:self.__name = name,self.__grade = grade,也就是我们可以在self之后加上二个下划线,这样我们就不可以在类之外访问我们的成员变量了。
如果将类的成员变量修改成私有的,那我们怎样进行访问他了?

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'A Class example'
__author__ = 'xu chao'


class Student(object): # 这里类后面加上了一个object表示继承关系,如果没有继承就写object,这是元类
    def __init__(self, name, grade): # 注意init前后都有二个下划线,第一个参数是self, 后面是传进来的形参
        self.__name = name # self.name,self.grade为成员变量
        self.__grade = grade

    def print_value(self): # 每一个函数第一个参数都是self
        print('name=%s, grade=%s'%(self.__name, self.__grade))

    def get_name(self): # 这是获取私有成员变量的值
        return self.__name

    def get_grade(self):
        return self.__grade

    def set_name(self, name): # 这是可以进行修改私有成员变量的值
        self.__name = name


student1 = Student('xuchao', 99) # 进行调用成员函数
student1.print_value()
student1.__name = 'jack' # 直接通过这样赋值操作编译时没有任何错误的,但是并没有达到正确修改代码的作用
student1.print_value()
student1.set_name('jack')   # 通过自己类里面的函数我们可以实现修改成员变量的功能
student1.print_value()

3. 继承与多态

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

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'xuchao'


class Animal(object): # 首先定义一个基类,Animal,这个类首先继承了这个object这个基类

    def run(self):
            print('animal is running') # 使用继承的好处就是如果子类继承了父类,那么子类就会继承父类的方法,这样开发起来很方便


class Dog(Animal): # Dog这个类继承了Animal这个类,我们称它为子类,称Animal为父类

        def run(self): # 因为父类中存在了这个函数,我们在子类中重新写一个一样的函数,那么子类中就会代替父类的同名函数
                print('dog is running')


class Cat(Animal):

        def run(self):
                print('cat is running')

dog = Dog()
dog.run()
cat = Cat()
cat.run()

关于变量继承小问题

a = Dog() # 这句话表示Dog()表示a是一个Dog对象
print(isinstance(a, Animal)) # 我们可以通过isinstance()函数判断一个变量是否为一个类型

a = Animal()
print(isinstance(a, Dog)) # 这二个例子表明了:如果一个变量是从父类继承的类的变量,那他一定是父类类型;反之不一定成立

猜你喜欢

转载自blog.csdn.net/alxe_made/article/details/80485063
今日推荐