python 给对象绑定属性和方法和__slots__的使用
# 以c语言为主是静态语言,运行之前先编译,在运行的过程中不允许编辑代码
# 在运行的过程中,可以改变,可以添加属性,就是属于动态语言(python)
# python动态的添加属性以及方法
class Test(object):
pass
# t = Test()
# print(dir(t))
# 运行的过程中给对象绑定(添加)属性
class Person(object):
def __init__(self,newName,newAge):
self.name = newName
self.age = newAge
def eat(self):
print("---%s正在吃--"%self.name)
# 添加属性
# laowang = Person("老王",100000)
# print(laowang.name)
# print(laowang.age)
# laowang.addr = '山东' #给对象添加属性,属性和对象绑定到了一起
# print(laowang.addr)
# laozhao = Person("老赵",18)
# print(laozhao.name)
# print(laozhao.age)
# # print(laozhao.addr)
# Person.num = 100 #给类添加属性,属性和类绑定到了一起
# print(laowang.num)
# print(laozhao.num)
# 添加方法
def run(self):
print("---%s正在吃--"%self.name)
p1 = Person("p1",10)
p1.eat()
# p1.run = run #这个方法式错误的
# p1.run() #虽然p1对象中的run属性已经指向了10行的函数,但这句代码还是不正确,因为run属性指向的函数时候来添加的,p1.run()的时候,并没有把p1当作第一个参数,导致了第10行的函数调用的时候,出现了缺少参数的问题
# import types
# types.MethodType() #把函数绑定到实例对象上
import types
p1.run = types.MethodType(run,p1)
p1.run()
# __slots__
# 使用特殊的__slots__变量,来限制该class实例能添加的属性
class Person(object):
__slots__ = ("name","age")
p = Person()
p.name = "laowang"
p.age = 18
print(p.name)
print(p.age)
# laowang
# 18
p.address = '北京'
print(p.address)
# Traceback (most recent call last):
# File "python是动态语言.py", line 101, in <module>
# p.address = '北京'
# AttributeError: 'Person' object has no attribute 'address'
python 给对象绑定属性和方法和__slots__的使用的更多相关文章
- 使用引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机绑定规则
通过引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机将采用以下绑定规则: 实例方法与引用变量实际引用的对象的方法进行绑定,这种绑定属于动态绑定,因为是在运行时由 Java 虚拟机动态决定的 ...
- 理解Python中的类对象、实例对象、属性、方法
class Animal(object): # 类对象 age = 0 # 公有类属性 __like = None # 私有类属性 def __init__(self): # 魔法方法 self.na ...
- Ajax01 什么是ajax、获取ajax对象、ajax对象的属性和方法
1 什么是ajax ajax是一种用来改善用户体验的技术,其本质是利用浏览器提供的一个对象(XMLHttpRequest,也可称之为ajax对象) 向服务器发送异步请求;服务器返回部分数据(不是一个完 ...
- Event 对象的属性和方法
事件触发时,会将一个 Event 对象传递给事件处理程序,比如: document.getElementById("testText").addEventListener(&quo ...
- Jquery jqXHR对象的属性和方法
在 jQuery 1.4 之前(包括1.4),$.ajax() 方法返回的是浏览器原生的 XMLHttpRequest 对象. 从 jQuery 1.5 开始,$.ajax() 方法返回 jQuery ...
- Ajax01 什么是ajax、获取ajax对象、ajax对象的属性和方法、编程步骤、缓存问题、乱码问题
目录 1 什么是ajax 2 获取ajax对象 3 ajax对象的属性和方法 4 使用ajax的编程步骤 5 缓存问题 6 乱码问题 1 什么是ajax ajax是一种用来改善用户体验的技术,其本质是 ...
- Javascript常用对象的属性和方法
javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算 ...
- JS中的RegExp对象常用属性和方法
JavaScript提供了一个RegExp对象来完成有关正则表达式的操作和功能,每一条正则表达式模式对应一个RegExp实例.有两种方式可以创建RegExp对象的实例. 使用RegExp的显式构造函数 ...
- location对象的属性和方法应用(解析URL)
本文将与大家分享下location对象使用属性和方法来解析URL的实例,感兴趣的朋友可以参考下,希望对你有所帮助 location对象提供了很多属性和方法用来解析URL. 复制代码代码如下: &l ...
随机推荐
- zookeeper的ACL权限控制
ACL:Access Control List 访问控制列表 1. 简介 0.概述 ACL 权限控制,使用:scheme:id:perm 来标识,主要涵盖 3 个方面: 权限模式(Scheme): ...
- 类ThreadLocal的使用与源码分析
变量值的共享可以使用public static的形式,所有的线程都使用同一个变量.如果每个线程都有自己的共享变量,就可以使用ThreadLocal.比如Hibernat的session问题就是存在Th ...
- Markdown超链接及脚注
Markdown链接及脚注 [时间:2017-02] [状态:Open] [关键词:markdown,标记语言,页内链接,超链接,脚注] 本文内容来自Markdown 11种基本语法,仅对其中我不熟悉 ...
- P4001 [ICPC-Beijing 2006]狼抓兔子
题目地址:P4001 [ICPC-Beijing 2006]狼抓兔子 平面图 边与边只在顶点相交的图. 对偶图 对于一个平面图,都有其对应的对偶图. 平面图被划分出的每一个区域当作对偶图的一个点: 平 ...
- delphi 的 ORM 框架
delphi 的 ORM 框架,收集如下: 1.EntityDac https://www.devart.com/entitydac/download.html 2.mORMot The ...
- python 大全
python 大全:https://awesome-python.com/ 生产 GUI 应用的库 :PyQt ,PySide , 不错 (https://kivy.org)kivy - A li ...
- 设计模式C++学习笔记之十六(Observer观察者模式)
16.1.解释 概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. main(), IObservable,被观察者接口 CHanFei ...
- POJ 1741 Tree 树上点分治
题目链接:http://poj.org/problem?id=1741 题意: 给定一棵包含$n$个点的带边权树,求距离小于等于K的点对数量 题解: 显然,枚举所有点的子树可以获得答案,但是朴素发$O ...
- adb ( Android Debug Bridge)
adb ( Android Debug Bridge) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调试应用. adb工具的工 ...
- js实现两种排序算法——冒泡、快速排序
* 一:冒牌排序1思想:冒泡排序思想:每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置要实现上述规则需要用到两层for循环,外层从第一个数到倒数第二个数,内层从 ...