【Python面向对象进阶②】——__slots__限制类动态增加属性

简介: 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__ 变量,来限制该class能添加的属性

__slots__限制类动态的增加属性

py面向对象进阶.png

正常情况下,当我们定义了一个 class,创建了一个 class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。

动态语⾔:可以在运⾏的过程中,修改代码

静态语⾔:编译时已经确定好代码,运⾏过程中不能修改

但是,如果我们想要限制 class的属性怎么办?比如,上例只允许对人类的实例添加 nameage 属性。

为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__ 变量,来限制该class能添加的属性:

先定义一个学生的类class:

# -*- coding: utf-8 -*-
# @author: Flyme awei 
# @Time  : 2022/7/1 20:02

class Student(object):
    # 只允许当前Student拥有name和sex属性,用tuple定义允许
    __slots__ = ('name', 'age')


if __name__ == '__main__':
    s1 = Student()
    s1.name = '吕布'
    s1.age = 18
    s1.sex = '男'

测试:
在这里插入图片描述

首先,我们创建了一个学生对象s1,给s1一个 nameage属性,给定成功,
但是,当我们给实例s1一个score的属性时,提示 'Student' object has no attribute 'sex'报错

由此可以看出来, __slots__ 限制了对象的属性随意添加。

需要注意一点的是:使⽤ __slots__ 要注意 __slots__ 定义的属性仅对当前类实例起作⽤,对继承的⼦类是不起作⽤的
# python交互式环境 
class subStudent(Student): 
    pass

测试:

>>> sub1 = subStudent() 
>>> sub1.score = 100 
>>> sub1.score 
100
相关文章
|
26天前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
27天前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
1月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
16 1
|
1月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
21 2
WK
|
1月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
13 0
|
1月前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
35 0
|
1月前
|
Python
Python中的类(一)
Python中的类(一)
|
1月前
|
Python
Python中的类(一)
Python中的类(一)
|
1月前
|
Python
Python中的类(二)
Python中的类(二)
|
1月前
|
开发者 Python
Python类和子类的小示例:建模农场
Python类和子类的小示例:建模农场