在Python中,我们可以在运行时动态地添加或删除类和实例的属性和方法 1、动态添加属性和方法 1.1 动态添加属性和方法:直接给实例或类赋值。在上面的例子中,我们通过p1.email = 'john@example.com'来动态添加了实例属性。而通过Professor.department = 'Computer Science'来动态添加了类属性。 class Professor: def __init__(self, name, age, field): self.name = name self.age = age self.field = field def introduce(self): print(f'My name is {self.name}, I'm {self.age} years old, and my research field is {self.field}.')# 创建实例p1 = Professor('John', 45, 'Artificial Intelligence')# 添加实例属性p1.email = 'john@example.com'print(p1.email) # 输出:john@example.com# 添加实例方法def research_interest(self): print(f'My research interests are in the field of {self.field}.')p1.research_interest = research_interestp1.research_interest() # 输出:My research interests are in the field of Artificial Intelligence.# 添加类属性Professor.department = 'Computer Science'print(Professor.department) # 输出:Computer Science# 添加类方法@classmethoddef change_department(cls, new_department): cls.department = new_departmentProfessor.change_department = change_departmentprint(Professor.department) # 输出:Computer ScienceProfessor.change_department('Engineering')print(Professor.department) # 输出:Engineering 1.2使用内置函数setattr()。内置函数setattr()可以用来动态地向一个对象添加属性或方法。
其中,obj是要添加属性或方法的对象,name是要添加的属性或方法的名称,value是属性或方法的值。 class Professor: def __init__(self, name, field): self.name = name self.field = fieldprofessor = Professor('John', 'Computer Science')# 动态添加属性setattr(professor, 'age', 45)print(professor.age) # 输出 45# 动态添加方法def greet(self): print(f'Hello, my name is {self.name} and I am a professor of {self.field}.')setattr(professor, 'greet', greet)professor.greet() # 输出 'Hello, my name is John and I am a professor of Computer Science.' 创建了一个教授的实例professor,然后使用setattr()函数向它添加了一个名为age的属性和一个名为greet的方法。greet方法的定义中包含一个参数self,它表示方法的调用者,也就是教授实例本身。我们可以将self看作是一个占位符,当我们调用greet方法时,Python会自动将调用者作为第一个参数传入方法中。 2、动态删除属性和方法:动态删除属性和方法同样也有两种方式:一种是使用del语句,另一种是使用内置函数delattr()。
|
|