轻松学会python面向对象第8篇---类可以规范数据的行为

类可以规范数据的行为,数据有什么样的行为,是人赋予的,因此,类规范的是人的行为。

1. 保护数据不被肆意修改

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


stu = Student('小明', 14)
print(f"{stu.name}今年{stu.age}岁")

stu.age = 1000
print(f"{stu.name}今年{stu.age}岁")

在上面的例子中,我将stu的age属性修改了1000,这显然是不合理的,避免这种情况发生的办法是将age修改为私有属性。

python的面向对象,并没有像其他面向对象语言一样,提供完整严格的访问控制,只是约定用单个下划线开头的属性和方法是私有的。

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

        self.set_age(age)

    def set_age(self, age):
        if age < 7 or age > 20:
            raise Exception('年龄不符合要求')

        self._age = age

    def get_age(self):
        return self._age


stu = Student('小明', 14)
print(f"{stu.name}今年{stu.get_age()}岁")

stu.set_age(1000)
print(f"{stu.name}今年{stu.get_age()}岁")

age属性,并没有直接暴露给使用者,而是提供了set_age和get_age两个方法,对age属性的修改和获取都必须通过这两个方法来进行,这样就可以有效的限制使用者错误的使用age属性。

2. 定义数据行为的能力

类提供的方法,定义了数据的能力,等价于约定了使用者可操作执行的范围。

当你使用一个开源库时,如果提供给你的是一个类,那么你可以通过这个类的定义,了解到你可以做哪些操作。

通常,好的代码都有规范的描述清晰的注释,通过看源代码,你可以比查阅文档更快的了解如何使用一个开源库,并且挖掘出一些文档里没有介绍的方法。

如果你需要向其他人提供一个类,你需要考虑哪些属性可以被使用者修改,哪些属性不应当对外开放,需要提供哪些方法让使用者来应用。

我反复强调,类是一个约定,约定有哪些数据可以被操作,约定有哪些方法可以使用。

类帮助我们去思考数据本身所具有的内容和形式,类帮助我们与其他人沟通交流,当大家都认可并熟悉这种约定方式后,交流自然顺畅。

3. 封装

何为封装?对数据的管理即是封装。

定义一个类,就是对数据的管理。

属性的定义,是对数据内容的管理。

方法的定义,是对数据行为的管理。

不必在抽象的概念上纠结太久,我强烈建议你从管理的角度来理解编程语言的概念。

封装一个类,目的是去做一件事情,为了做这件事情,需要哪些数据,需要哪些步骤,这些数据就是类的属性,步骤就是类的方法。

类是一种约定,约定了我们要做一件事情需要哪些数据,需要哪些方法,如果方法一词你感觉陌生,我们也可以说,需要哪些能力。

有了数据,有了操作这些数据的能力,就可以做自己想要做的事情,这是一种贴近我们日常思维的思考问题的方式。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案