笔记-python-动态添加属性

1.      添加对象/类属性

添加对象属性

class Person(object):

def __init__(self, newName, newAge):

self.name = newName

self.age = newAge

zhangsan = Person("张三", 18)

zhangsan.addr = "北京"    # 类对象zhangsan动态添加对象属性addr

print(zhangsan.name)    # 张三

print(zhangsan.age)     # 18

print(zhangsan.addr)    # 北京

lisi = Person("李四", 28)

print(lisi.name)        # 李四

print(lisi.age)         # 28

print(lisi.addr)        # 'Person' object has no attribute 'addr'

添加类属性:

class Person(object):

def __init__(self, newName, newAge):

self.name = newName

self.age = newAge

Person.addr = "北京"  # 类Person动态添加类属性addr

zhangsan = Person("张三", 18)

print(zhangsan.name)    # 张三

print(zhangsan.age)     # 18

print(zhangsan.addr)    # 北京

lisi = Person("李四", 28)

print(lisi.name)    # 李四

print(lisi.age)     # 28

print(lisi.addr)    # 北京

2.      动态添加方法

类中有三种方法,实例,静态,类,其中静态和类方法没有什么太需要注意的。

def exp(s,*args):

print('function exp.')

A = type('A',(),{'exp':exp})

a = A()

class B():

def help1():

pass

b = B()

@staticmethod

def exp2():

print('function exp2.')

B.exp2 = exp2

@classmethod

def exp3(cls):

print('function exp3.')

B.exp3 = exp3

结果输出:

>>> b

<__main__.B object at 0x0000003949041E80>

>>> b.exp2

<function exp2 at 0x0000003948702E18>

>>> b.exp3

<bound method exp3 of <class '__main__.B'>>

>>> a.exp

<bound method exp of <__main__.A object at 0x0000003949041400>>

>>> A.exp

<function exp at 0x00000039492B02F0>

>>> B.exp2

<function exp2 at 0x0000003948702E18>

>>> B.exp3

<bound method exp3 of <class '__main__.B'>>

>>>

重点是添加实例方法

class B():

def help1():

pass

b = B()

@staticmethod

def exp2():

print('function exp2.')

B.exp2 = exp2

@classmethod

def exp3(cls):

print('function exp3.')

B.exp3 = exp3

def exp4():

print('function exp4')

import types

B.exp = types.MethodType(exp,b)

B.exp4 = exp4

结果输出:

>>> b.exp

<bound method exp of <__main__.B object at 0x0000009F6FAF1EF0>>

>>> b.exp4

<bound method exp4 of <__main__.B object at 0x0000009F6FAF1EF0>>

>>> b.exp3

<bound method exp3 of <class '__main__.B'>>

>>> b.exp2

<function exp2 at 0x0000009F6D6A2E18>

>>> b.help1

<bound method B.help1 of <__main__.B object at 0x0000009F6FAF1EF0>>

实例方法,实例方法,类方法,静态方法,实例方法,注意其中的区别。

3.      __slots__

上面是如何添加属性,python也提供了一个特殊变量来限制实例可添加的属性名。

注意,是限制实例的属性名。

class C():

__slots__ = ('name', 'age')

pass

结果输出:

>>> c.ty = 45

Traceback (most recent call last):

File "<pyshell#58>", line 1, in <module>

c.ty = 45

AttributeError: 'C' object has no attribute 'ty'

4.      总结

python的一切都是类,除了参数传递需要注意外,其实各种方法对外部的接口都是差不多的。

笔记-python-动态添加属性的更多相关文章

  1. python动态添加属性和方法

    ---恢复内容开始--- python动态添加属性: class Person(object): def __init__(self,newName,newAge): self.name = newN ...

  2. python 动态添加属性及方法及“__slots__的作用”

    1.动态添加属性 class Person(object): def __init__(self, newName, newAge): self.name = newName self.age = n ...

  3. python动态添加属性

    class A: def __init__(self, info ={}): self.info = info def __getattr__(self, item): return self.inf ...

  4. day_5.26python动态添加属性和方法

    python动态添加属性和方法 既然给类添加⽅法,是使⽤ 类名.⽅法名 = xxxx ,那么给对象添加⼀个⽅法 也是类似的 对象.⽅法名 = xxx '''2018-5-26 13:40:09pyth ...

  5. 我的Python学习笔记(四):动态添加属性和方法

    一.动态语言与静态语言 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C ...

  6. Python笔记_第三篇_面向对象_8.对象属性和类属性及其动态添加属性和方法

    1. 对象属性和类属性. 我们之前接触到,在类中,我们一般都是通过构造函数的方式去写一些类的相关属性.在第一次介绍类的时候我们把一些属性写到构造函数外面并没有用到构造函数,其实当时在写的时候,就是在给 ...

  7. Python基础之动态添加属性,方法,动态类,静态类

    ## 动态添加属性class Person: def __init__(self,name): self.name = name# 1.通过对象.属性名称来操作p = Person('KTModel' ...

  8. 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。

    概念: 并行:同时运行 并发:看似同时运行  json后任然中文的问题 import json d = {"名字":"初恋这件小事"} new_d1 = jso ...

  9. Runtime(动态添加属性)

    下面通过一个实例展示一下Runtime(动态添加属性)的用法 下面对运行时添加属性用到的策略参数进行补充: 这样看来,前面的NSString* name用的策略是retain nonatomic就知道 ...

随机推荐

  1. ANT 的Table表格样式修改方法

    注:(大家在给页面添加参数或者方法的时候,记得写上注释,方便别人查看) 1.表格行选中样式添加:(可以去beijing,精子库质控统计查看例子) (咱们以前页面上的表格都是在hover时显示选中效果, ...

  2. 在linux代码中打印函数调用的堆栈的方法

    之前一直有这样的需求,当时问到,也没搜到方法,现在竟然既问到了,也搜到了,哎,世事真是不能强求啊! 在Linux内核调试中,经常用到的打印函数调用堆栈的方法非常简单,只需在需要查看堆栈的函数中加入: ...

  3. pymongo 常用操作函数

    pymongo 是 mongodb 的 python Driver Editor. 记录下学习过程中感觉以后会常用多一些部分,以做参考. 1. 连接数据库 要使用pymongo最先应该做的事就是先连上 ...

  4. python manage.py startapp app 时候报错No module named _sqlite3

    python manage.py startapp app 报错如下: File "manage.py", line 10, in <module>    execut ...

  5. UVA11294 Wedding

    嘟嘟嘟 大佬们都说这是2-SAT入门题,然而对于刚学2_SAT的本菜鸡来说半天才理解…… 题面:新娘和新郎不能坐在同一侧,妻子和丈夫不能坐在同一侧,有**关系的两个人必须至少一个坐在新娘一侧,问方案. ...

  6. Sublime Text 3的安装,卸载,更新,激活

    安装: 下载安装包:建议到官方网站下载,网址:http://www.sublimetext.com/3 . 卸载 在Finder中进入“/Users/用户名/Library/Application S ...

  7. 2018.12.20 Spring环境如何搭建

    Spring学习 1.导入spring约束 为后续创建xml文件做铺垫 2.开始搭建Spring环境 1.创建Web项目,引入spring的开发包(根据下面的图来引入) 2.引入jar包 coreCo ...

  8. GroundPlaneEstimator.cpp解读

    GroundPlaneEstimator域下的compute函数,就相当于整个cpp的主函数,也体现了整个调用过程,先执行compute_v_disparity_data,再compute_v_dis ...

  9. 插入排序_C语言_数组

    插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...

  10. [HAOI2010]软件安装(树形背包,tarjan缩点)

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...