Python实训(3)--面向对象

来学Python面向对象的特性(一天讲了太多东西,真就填鸭。。)

类定义:

class Student(object):

这里括号内就表示继承基类,所有类都继承为object这个“超级类”

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

用以上代码定义类函数,函数名前后有两个下划线的表示特殊函数
如这里是__init__是构造函数,第一个参数是self表示指向自己这个对象。

所有的面向对象特殊函数指路:
https://www.cnblogs.com/angelyan/p/10366961.html

在这里插入图片描述

“静态”成员

Python中没有静态成员变量的说法,但是也可以给类本身绑定变量

直接在外部指定就可以

	Student.num=100;

属于类的变量可以由所有的实例对象访问输出
在这里插入图片描述
所以说千万不能让类的变量与实例对象的变量名称一样!

访问限制:

Python中没有public、protect等标识符,

但是可以在实例的变量名前加双下划线__使之成为私有成员变量,

外部无法直接访问,

这样之后再编写访问私有成员的接口函数,可以实现封装。

在这里插入图片描述
在这里插入图片描述
但这样的封装是比较弱的,

因为加双下划线不能真正使之成为私有,

本质只是偷偷改了一下名字:
在这里插入图片描述
只是这样的改名方法在不同版本不一样,所以不建议用这种方式访问成员变量。

重点:

在python中,有另一种的实现封装的方法,使得接口变得方便同时,为成员变量限制值。

用到了上一节学到的“装饰器”的概念:

在这里插入图片描述

    @property
    def score(self):
        return self._score
	将score()成员函数视为一个属性(成员变量),它返回_score的值



	@score.setter
    def score(self,value):
        if value<0 or value>100:
            print("分数应该在0到100之间")
            return
        self._score=value
	说明当在外部调用s.score=xxx时,运行s.score(xxx)  在外部貌似就不能用s.score(xxx)

以上有三个score,他们必须保持命名一致。

这也好理解,

一个是为了读取_score,

一个是为了设置_score,

但是对外都是用s.score统一的,

当然要用同样的命名实现这种统一

继承与多态:

Python的继承与多态和C++相近,继承方法前文已有。多继承这种特性不用也罢。

C++要用这里也都适用

Python可以用isinstance()来判断一个对象是否属于某一个类

(子类当然是父类,但是父类不是子类)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值