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

本文介绍了Python中动态添加属性的两种方式:添加实例属性和类属性,并提供了示例。同时,详细讲解了slots属性的用途,如何限制类实例的动态属性添加,以及slots在子类中的继承规则。动态添加属性是Python灵活性的体现,而slots则提供了一种优化内存使用和控制类结构的手段。

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属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值