您的位置:首页 > 编程语言 > Python开发

python动态添加属性(对象属性,类属性) __slots__对动态添加属性及方法的限制作用

2019-07-02 14:55 232 查看
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

**

1,python动态添加属性(对象属性,类属性)

**
1,python是动态类型语言:可以在运行中改变自身结构,动态添加/删除属性和方法,删除函数

2,也是强类型语言:变量的类型可以在运行之后,任意变量,不需要强制转换

动态添加实例属性类属性的演示如下:

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

p = Person("皮皮", 1)

# 动态添加属性

# 1,以下是添加实例属性的两种方式
p.address = "义乌"
setattr(p, "gender", "男")  # 为p对象添加了一个名为gender的属性,存储的值为“男”
print("名字是%s 年龄是%d 地址是%s 性别是%s" % (p.name, p.age, p.address, p.gender))
print("名字是%s 年龄是%d 地址是%s 性别是%s" % (p.name, p.age, p.address, getattr(p, "gender")))

# 2,添加对象属性 类名.属性名
Person.CLS_ID = 110
print(p.CLS_ID)

运行结果为:

名字是皮皮 年龄是1 地址是义乌 性别是男
名字是皮皮 年龄是1 地址是义乌 性别是男
110

添加对象方法的演示如下:

import types  # 注意必须要先导入types这个模块
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

# 动态添加方法

# 1,添加实例方法(也可称为成员方法)
def study(self):
print("一天不写代码难受!!!")

p = Person("皮皮", 1)
p1 = Person("彬彬", 18)

p.study = types.MethodType(study, p)
p.study()
# p1.study() 会报错,因为这添加的是对象方法,只能对象p调用

运行结果为:

一天不写代码难受!!!

添加静态方法和类方法的演示如下:

import types					# 注意必须要先导入types这个模块
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

# 动态添加方法

# 2,添加静态方法
@staticmethod
def test():
print("我是静态方法")
# 给类添加静态方法
Person.method = test        	# 注意:这里不能加括号

# 3,添加类方法
@classmethod
def testClsMethod(cls):
print("我是类方法")
Person.method22 = testClsMethod  # 注意:这里不能加括号

p = Person("皮皮", 1)
p1 = Person("彬彬", 18)

# 调用静态方法
p.method()     	 # 对象访问
p1.method()
Person.method()  # 提倡用类名.的方式去访问静态方法

# 访问类方法
p.method22()
p1.method22()
Person.method22()

运行结果为:

我是静态方法
我是静态方法
我是静态方法
我是类方法
我是类方法
我是类方法

**

2,__slots__对动态添加属性及方法的限制作用

**
1,__slots__在动态添加属性和方法中,只对类对象进行限制,不对类进行限制

2,__slots__对动态添加类对象的属性和方法进行限制

3,__slots__对子类没有任何限制作用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: