Python 进阶学习笔记之八:面向对象高级编程

Python 进阶系列笔记文章链接:
Python 进阶学习笔记之一:内置常用类型及方法
Python 进阶学习笔记之二:常用数据类型(上)
Python 进阶学习笔记之三:常用数据类型(下)
Python 进阶学习笔记之四:高效迭代器工具
Python 进阶学习笔记之五:异步 IO
Python 进阶学习笔记之六:多线程编程
Python 进阶学习笔记之七:互联网支持
Python 进阶学习笔记之八:面向对象高级编程
Python 进阶学习笔记之九:IO 编程
Python 进阶学习笔记之十:一般加密支持
Python 进阶学习笔记之十一:日志支持
Python 进阶学习笔记之十二:数据压缩与归档

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想,编码之前先要进行进行数据的抽象设计,把数据的特点特性进行抽象分类,进而抽象成一个一个的类,而对象就是一个个具体化的 “数据-行为” 个体。

1 面向对象基本概念

1.1 一个简单的类实现

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))

在一个类中以两个下滑线开头和结尾的都有特殊含义,上面哪个类中的方法__init__ 方法就是类的构造方法(初始化方法),而其内的 name 和 score 就是实例属性,需要在实例化一个对象时进行赋值(初始化)。类中方法和普通函数主要区别是,类中普通方法的第一个参数是self,指向了调用对象本身,因此对象中的属性在这个方法中都能直接引用。

1.2 访问限制

在 Class 内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑,这称为数据封装。但是,从前面 Student 类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性:

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

一般我们做类设计时,目的之一就是为了隐藏数据操作或者统一数据操作,一般对外提供一个修改属性的方法,而不是直接对外开放属性,比如添加一个修改 score 的方法:

class Student(object):
	def setSocre(self, score):
		if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError('bad score')

这种方法的好处是,类提供者可以控制赋值操作的有效性。但要怎样对外隐藏属性?如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线 __,在 Python 中,实例的变量名如果以 __ 开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:

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))

改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量 .__name 和实例变量 .__score 了。如果外部需要获取属性值,我们也像上面提供修改属性方法那样提供一个获取方法即可:

class Student(object):
    ...
    def get_name(self):
        return self.__name

    def get_score(self):
        return self.__score

需要注意的是,在Python中,变量名类似 __xxx__ 的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值