栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python基础(十一)动态添加属性

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python基础(十一)动态添加属性

Python基础(十一)动态添加属性
  • Python基础(十一)
  • 1、动态添加属性
    • 1.1、动态添加属性
    • 1.2、动态添加方法
  • 2、slots属性
    • 2.1、概述
    • 2.2、使用slots属性
    • 2.3、注意点
  • 3、小结

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属性
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/961205.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号