python中动态特性的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/albertjone/article/details/79160786
  • python中一切皆对象,变量可以存储对象的地址
  • python动态语言的实现
    • 为实例动态添加属性**
      首先定义一个动物类代码如下:
class Animal (Object):
    name = ''
    age = 0
animal = Animal()
print animal.name
print animal.age
print animal.sex

输出如下结果

Traceback (most recent call last):
0
  File "/Users/mrrobot/Desktop/untitled/test.py", line 9, in <module>

    print test.sex
AttributeError: 'Animal' object has no attribute 'sex'

可见Animal这个类是没有sex这个属性的
下面实现添加,代码如下:

#!/bin/env python
class Animal(object):
    age = 0
    name = ''

animal =Animal()
animal.sex = 'f'#只要直接在实例上添加属性便可以
#同样这种操作也可以对类使用
print animal.age
print animal.name
print animal.sex
print dir(Animal)

输出结果:

0

f
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name']

Process finished with exit code 0
    • 在输出结果中Animal类依旧是没有sex这个属性的
#!/bin/env python
class Animal(object):
    def init(self):
        self.age = 0
        self.name = ''
animal = Animal()
animal.init()
#只有在执行了init()方法后,animal才有age和name这两个属性,
#否者会报'Animal' object has no attribute 'age'这个错,
#这里的错误中的Animal值的是Class Animal
print animal.age
print animal.name

为实例添加方法
代码实现如下:

#!/bin/env python
from types import MethodType
class Animal(object):
    age = 0
    name = ''

animal =Animal()
def set_age(self,age) :
    self.age=age
animal.set_age = MethodType(set_age,animal,Animal)
#通过types模块的MethodType将一个方法和一实例进行bounding(绑定)
#如果想要将这个set_age()方法和这个类所有的实例相关联的话,可以将上面的animal换成None
print animal.age
animal.set_age(2)
print animal.age
展开阅读全文

没有更多推荐了,返回首页