# 以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__的使用的更多相关文章

  1. 使用引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机绑定规则

    通过引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机将采用以下绑定规则: 实例方法与引用变量实际引用的对象的方法进行绑定,这种绑定属于动态绑定,因为是在运行时由 Java 虚拟机动态决定的 ...

  2. 理解Python中的类对象、实例对象、属性、方法

    class Animal(object): # 类对象 age = 0 # 公有类属性 __like = None # 私有类属性 def __init__(self): # 魔法方法 self.na ...

  3. Ajax01 什么是ajax、获取ajax对象、ajax对象的属性和方法

    1 什么是ajax ajax是一种用来改善用户体验的技术,其本质是利用浏览器提供的一个对象(XMLHttpRequest,也可称之为ajax对象) 向服务器发送异步请求;服务器返回部分数据(不是一个完 ...

  4. Event 对象的属性和方法

    事件触发时,会将一个 Event 对象传递给事件处理程序,比如: document.getElementById("testText").addEventListener(&quo ...

  5. Jquery jqXHR对象的属性和方法

    在 jQuery 1.4 之前(包括1.4),$.ajax() 方法返回的是浏览器原生的 XMLHttpRequest 对象. 从 jQuery 1.5 开始,$.ajax() 方法返回 jQuery ...

  6. Ajax01 什么是ajax、获取ajax对象、ajax对象的属性和方法、编程步骤、缓存问题、乱码问题

    目录 1 什么是ajax 2 获取ajax对象 3 ajax对象的属性和方法 4 使用ajax的编程步骤 5 缓存问题 6 乱码问题 1 什么是ajax ajax是一种用来改善用户体验的技术,其本质是 ...

  7. Javascript常用对象的属性和方法

    javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算 ...

  8. JS中的RegExp对象常用属性和方法

    JavaScript提供了一个RegExp对象来完成有关正则表达式的操作和功能,每一条正则表达式模式对应一个RegExp实例.有两种方式可以创建RegExp对象的实例. 使用RegExp的显式构造函数 ...

  9. location对象的属性和方法应用(解析URL)

    本文将与大家分享下location对象使用属性和方法来解析URL的实例,感兴趣的朋友可以参考下,希望对你有所帮助   location对象提供了很多属性和方法用来解析URL. 复制代码代码如下: &l ...

随机推荐

  1. excel打开csv格式的文件,数字末尾都变成零,解决方式

    excel打开csv格式的文件,数字末尾都变成零,解决方式

  2. Spring Boot:如何配置静态资源的地址与访问路径

    spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath ...

  3. JavaScript数组去重—ES6的两种方式

    说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代 ...

  4. TextArea 保存时换行符处理

    后台数据保存时就要处理“\r\n",替换成”<br />",前台(html)页面显示时再做下处理. 自己是mvc页面,用到了两个方法:Html.Raw(),以及Http ...

  5. 修改Linux主机名与IP之间的映射关系

    linux主机版本: Distributor ID: UbuntuDescription: Ubuntu 14.10Release: 14.10 一.修改linux主机名 1.使用hostname命令 ...

  6. 【转】关于Log4j

    转自:http://www.open-open.com/lib/view/open1337754346355.html 原帖:http://blog.csdn.net/neareast/article ...

  7. 使用vue-cli初始化vue项目

    在项目中使用vue我使用vue-cli脚手架搭建项目 1.先安装nodejs 2.使用npm install -g vue-cli (建议在使用这步前先安装nrm来切换npm的源利器,使得下载资源更快 ...

  8. zabbix3.0.4利用iostat工具监控centos主机磁盘IO

    该监控基于iostat,然后iostat 命令用来监视系统输入/输出设备负载 1.安装IOSTAT工具 # yum install sysstat -y 测试iostat 查看所有硬盘io # ios ...

  9. java压缩图片质量

    使用了工具thumbnailator,据说thumbnailator是一个非常好的图片开源工具,使用起来很方便.不过没仔细看过,我只是需要压缩图片,让其占用空间变小而已.使用maven引入jar包 & ...

  10. Linux VPS基础命令 - cp复制文件命令

    cp命令在Linux VPS操作和应用过程中还是比较常用的,我们可以用来复制文件或者文件夹,重命名一个新的文件以及复制到其他路径中用于文件的转移. 举例用法: 1.复制root目录下的itbulu.c ...