Python基础(十一)动态添加属性
Python基础(十一)
1、动态添加属性
Python是一门动态语言所以可以在运行时可以改变其结构。所以Python可以在程序运行过程中添加属性与方法。
1.1、动态添加属性
- 动态添加的属性可以是类属性也可以是实例属性
- 动态添加的实例属性,只是添加给这个实例,其他实例无法访问
- 动态添加的类属性,则是添加到类上,可以通过类名或实例对象进行访问。
示例:
class People:
def __init__(self, name):
self.name = name
p1 = People("张三")
p1.age = 18
print(p1.age) # 18
print(p1.name) # 张三
People.kind = "peo"
print(People.kind) # peo
print(p1.kind) # peo
1.2、动态添加方法
- 动态添加的方法可以是类方法也可以是实例方法
- 添加类方法可以直接绑定,实例方法需要使用types模块
- 动态添加的实例方法,只是添加给这个实例,其他实例无法调用
- 动态添加的类方法,则是添加到类上,可以通过类名或实例对象进行调用
示例:
import types
class People:
def __init__(self, name):
self.name = name
p1 = People("张三")
p1.age = 18
def say(self):
print("{}的,年龄{}".format(self.name, self.age))
@classmethod
def lei(cls):
print("绑定个类方法")
# 绑定的实例名.要绑定到的方法名=types.MethodType(需要绑定的方法名,绑定的实例名)
p1.s = types.MethodType(say, p1) # 张三的,年龄18
p1.s()
# 绑定的类名.要绑定到的方法名=需要绑定的方法名
People.l = lei
People.l() # 绑定个类方法
2、slots属性
2.1、概述
- slots可以限制python在运行时动态的添加属性与类。
- 在定义class时通过slots属性限制class实例添加属性。只有在slots属性中的变量才能添加,没有在slots中的属性无法添加。
- 当子类未声明slots属性时子类不会直接继承该属性。
2.2、使用slots属性
class People:
# __slots__ = () 不允许动态添加属性
__slots__ = ('age')
class Student(People):
__slots__ = ('name')
pass
p1 = People()
p1.age = 18
print(p1.age) # 18
s1 = Student()
s1.age = 20
print(s1.age) # 20
s1.name = "张三"
print(s1.name) # 张三
2.3、注意点
- 不定义slots属性是,不对动态添加属性进行限制
- slots定义未空时,就是不允许动态添加属性
- 子类不主动声明slots属性书不会对父类的slots进行继承
- 子类声明slots属性后,子类自定义的slots会在父类的slots属性的基础上进行扩展 ( 子类的slots范围 = 父类的slots范围+本身定义的slots范围)
3、小结
- 动态添加属性
- slots属性

浙公网安备 33010602011771号