热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python是动态语言:动态添加或删除属性、方法

Python是动态语言:动态编辑属性、动态编辑方法上一篇文章:Python元类上一篇文章:Python装饰器:python真正入门的鉴定标准1、运行过程中给对象绑定、删除属性实例:
Python是动态语言:动态编辑属性、动态编辑方法

上一篇文章:
Python元类

上一篇文章:
Python装饰器:python真正入门的鉴定标准

1、运行过程中给对象绑定、删除属性

实例:

class Person():
def __init__(self,name):
self.name=name
#定义一个对象
mark=Person("mark")#终于修炼成人了,好开森
print("报出我的大名",mark.name)
#直接新定义属性:age
mark.age=18
print("我的实际年龄:",mark.age)#哎😔,写大了,我还是个宝宝👶
#动态删除属性:
del mark.age
#这种方法删除也可以
#delattr(Person,"age")
#下面一句会报错
#print("我的实际年龄:",mark.age)#哎😔,写大了,我还是个宝宝👶

结果:

报出我的大名 mark
我的实际年龄: 18

2、运行过程动态绑定方法、删除方法

import types
class Person():
def __init__(self,name):
self.name=name
def study(self):
print("学习使我快乐")
#定义一个方法
def run(self,speed):
print("我竟然会跑🏃,速度:",speed)
#定义一个类方法
@classmethod
def classmethod_fun(cls):
print("我是类方法")
#定义一个静态方法
@staticmethod
def static_fun():
print("我是静态方法")
#定义一个对象
mark=Person("mark")
mark.study()
#动态生命函数
mark.run=types.MethodType(run,mark)
#跑起来🏃
mark.run(100)
#绑定类方法
Person.classmethod_fun=classmethod_fun
#调用类方法
Person.classmethod_fun()
mark.classmethod_fun()
#绑定静态方法
Person.static_fun=static_fun
#调用静态放
Person.static_fun()
#删除方法
del Person.classmethod_fun
#下面一句会异常
#mark.classmethod_fun()
#这种方法删除也可以
delattr(Person,"static_fun")
#下面一句会异常
#Person.static_fun()

运行结果:

学习使我快乐
我竟然会跑🏃,速度: 100
我是类方法
我是类方法
我是静态方法

3、__slots__限制实例动态添加属性

仅仅对当前类有效,对继承类无效

实例:

class Person():
__slots__ = ("name","age")
mark=Person()
mark.name="mark"
mark.age=18
#下面一句会报错
mark.object="在哪"

结果:

Traceback (most recent call last):
File "/Users/zhaolixiang/Desktop/python/test1/python是动态语言/3、slots.py", line 8, in
mark.object="在哪"
AttributeError: 'Person' object has no attribute 'object'

推荐阅读
  • 变量间相关性分析
    本文探讨了如何通过统计方法评估两个变量之间的关系强度,重点介绍了皮尔森相关系数的计算及其应用。除了数学公式外,文章还提供了Python编程实例,展示如何利用实际数据集(如泰坦尼克号乘客数据)进行相关性检验。 ... [详细]
  • 本文探讨了如何将Python对象转换为字节流,以实现文件保存、数据库存储或网络传输的需求。主要介绍了利用pickle模块进行序列化的具体方法。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文深入探讨了动态赋值的概念及其在编程实践中的应用,特别是通过Java代码示例来展示如何利用循环结构动态地为数组分配值。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文提供了一种有效的方法来解决当Android Studio因电脑意外重启而导致的所有import语句出现错误的问题。通过清除缓存和重建项目结构,可以快速恢复开发环境。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文探讨了如何在Python中将具有相同值的元素分组到矩阵中,这是一个在数据分析和处理中常见的需求。 ... [详细]
  • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
author-avatar
谭小牙笑不漏齿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有