python动态添加、删除属性和方法

python动态添加、删除属性和方法

  • 动态添加属性
  • 动态添加方法
    • 动态添加实例方法
    • 动态添加类方法
  • 动态删除属性和方法
  • __slots__魔术变量

动态添加属性

属性不是在类定义的时候添加的,而是在程序运行过程中添加的,我们首先定义一个类:

class Person(object):
    """
     定义一个人的类
    """
    country = 'China'
    def __init__(self,name):
        self.name = name

p = Person('liming')

动态添加属性第一种方法:

p.age = 18

第二种为使用setattr()函数添加:

setattr(p,'age',18)
#三个参数分别为需要设置属性的对象,属性的名称(字符串)以及属性的值

为了在动态添加属性之前判断是否已经存在了这个属性,我们可以使用hasattr()进行判断:

if hasattr(p,'age'):
    #第一个参数为对象名,第二个参数为属性名(字符串)
    print("True")
else:
    print('False')
#True

动态添加方法

动态添加实例方法

不是在类创建的过程中添加的方法,而是在创建完成一个实例化对象的时候为对象添加一个方法,需要使用types.MethodType。

import types
def run(self):
    print("%s在奔跑" % self.name)

p.run = types.MethodType(run,p)
#第一个参数是要添加的方法,第二个参数是对象
p.run()
#liming在奔跑

动态添加类方法

在运行过程中给类添加一个方法。

@classmethod
def greet(cls):
    print('I come from %s' % cls.country)
Person.greet = greet
Person.greet()
#I come from China

动态添加静态方法。

@staticmethod
def sleep():
    print('sleeping')
Person.sleep = sleep
Person.sleep()
#sleeping

动态删除属性和方法

删除属性和方法一共有两种方式:
1.del 对象.属性名
2. delattr(对象,‘属性名’)

del p.name
delattr(p,'run')

__slots__魔术变量

可以用__slots__指定一些属性名,只有被指定的属性名同名的属性以后才可以动态添加。

class student(object):
    __slots__ = ('name','run','age','country')
    #由于初始化函数中使用到了name,所以__slots__中必须添加name
    def __init__(self,name):
        self.name = name

s = student('xiaohong')
setattr(s,'age',18)
s.run = run
s.height = 170
#报错

你可能感兴趣的:(python学习)