天气转冷,大家穿上秋裤了没有?
昨天我们学习了装饰器的用法,在不改变原本代码的情况下,增添了新的功能,就像冬天套在裤子里的秋裤一样,外表还和以前一样,内里却更加保暖。
我们在现实生活里,裤子里能穿什么,我们都是心里有数的,但是在Python里,要限制对象里可以穿什么东西,也就是能设置什么属性,就要用一个词来限定了。
这个词就是 slots 。
![e6ecd0bc12d724850019163be729ea01.png](https://i-blog.csdnimg.cn/blog_migrate/2e3673cb489893c3991a8a6ef7be4387.jpeg)
slots这个单词在英文中的原意是可以插入东西的窄缝,引申义就是限制元素的容器。
slots 在Python中的作用就是限制对象能使用的属性,不过slots 只能在当前类里对其类的对象进行限制,对子类并不起作用。在Python中的确定的用法是 slots前后各有两个下划线,样子就是这个样子 ' __slots__ '。
具体的代码如下
class Person(object):
# 限定Person对象只能绑定_name, _age和_sex属性
__slots__ = ('_name', '_age', '_sex')
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
def play(self):
if self._age <= 16:
print('%s正在玩飞行棋.' % self._name)
else:
print('%s正在玩斗地主.' % self._name)
在上述的代码里 在代码的一开始就有 __slots__ 这样的固定用法来限制了 Person这个对象所能绑定的属性,只有 名字,年龄,性别。这三个属性。
如此限定之后,person这个对象便只能有名字,年龄,性别这三个属性,如果要设置其他属性,程序的运行就会出现错误。
对象属性的限制也是为了进行面向对象的开发,而面向对象的的内容就是类与对象。
![ff2258013bcd1210127a125dce71855a.png](https://i-blog.csdnimg.cn/blog_migrate/8561c74dc03a83cecdb1743d1bc4f528.jpeg)
那么类与类之间的关系呢?
类与类之间的关系一般来说有三种。
is-a has-a use-a
is-a关系 也叫继承关系或泛化关系,比如手机和电子产品,汽车和运输工具。是大类中的一个单独产品。
has-a关系 也叫关联关系,关联关系具体来说就是组成一个系统的零件与总系统的关系,比如引擎与汽车,电池与手机,这种关系也可以叫做聚合关系,若是整体与局部同时存在,又会同时消亡的话,那么这种关系又可以叫做合成关系。
use-a关系 也叫依赖关系,比如说司机要去一个地方送货,送货的过程需要用到汽车,那么司机与汽车的关系就是依赖关系。
利用这些关系,就可以在已有类的基础上创建新的类,从而实现代码的复用,代码的复用在开发中不仅可以减少工作量,更利于代码的管理与维护。
![59cacf41a2f0555b09c04666265b7efa.png](https://i-blog.csdnimg.cn/blog_migrate/bfffb33abc75cf0082fd370ad4993f0a.jpeg)
继承便是代码的复用,这种方法就是让子类从父类那里将属性和方法直接继承下来,减少重复代码的编写,子类不仅可以继承父类的属性和方法,更可以定义自己的特有的属性和方法,这就是面向对象中所说的多态。
因为子类可以在父类的基础上设置自己特有的属性和方法,所以子类会比父类拥有更多的能力,也是如此,在实际的开发中,常常会出现用子类替换父类的现象。
面向对象是Python的一大特点,知晓其特点对我们之后的开发过程有莫大的作用。
今天便就说这么多了。
如果对文章中的内容有什么困惑的地方,可以在评论区提出自己的问题,学记同大家一起交流,解决各种问题,一起进步。
青年学记 陪伴着各位青年
![e7fd931d64570a238297451e7b119653.png](https://i-blog.csdnimg.cn/blog_migrate/17fed9afcabd26703ab8fa0f8e82190d.jpeg)
作者:青年学记 一名不断进步的程序猿
一起学习 一起进步
走向自立