Python中如何访问内置类的哪些属性?

2026-05-26 15:462阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计994个文字,预计阅读时间需要4分钟。

Python中如何访问内置类的哪些属性?

一、使用 __slots__ 优化类

当类中定义了 __slots__ 后,Python 会为该类的实例预分配固定数量的属性,从而减少内存占用。以下是一个使用 __slots__ 的示例:

pythonclass Person(object): __slots__=['name', 'age']

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

p=Person('lucy', 18)p.city='上'

二、不使用 __slots__ 的类

如果不使用 __slots__,Python 会为每个实例动态创建属性,这样会导致内存占用增加。以下是不使用 __slots__ 的示例:

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

p=Person('lucy', 18)p.city='上'


一、​​__slots__​​

  • 类中没有​​__slots__​​属性时,可以进行动态添加属性
  • class Person(object):
    def __init__(self, name, age):
    self.name = name
    self.age = age


    p = Person('lucy', 18)
    p.city = '上海'
    print(p.city) # 上海
  • 当类中有​​__slots__​​​时,可以对属性进行控制。只可以设置​​__slots__​​中的属性,如果设置的属性不在范围内,会​报错​。
  • class Person(object):
    __slots__ = ('name', 'age', 'sex')

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


    p = Person('lucy', 18)
    p.sex = '男'
    p.city = '上海' # 报错
    print(p.sex) # 男

    二、​​__doc__​​

  • 类的文档信息
  • class Person(object):
    """
    这是类的文档信息
    """
    __slots__ = ('name', 'age', 'sex')

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


    p = Person('lucy', 18)
    print(p.__doc__) # 对象名.__doc__
    print(Person.__doc__) # 类名.__doc__

    三、​​__module__​​

  • 获取对象所在的模块
  • ​test.py中的代码如下:​

    class Person(object):
    __slots__ = ('name', 'age', 'sex')

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

    ​demo.py中的代码:​

    import test
    p = test.Person('lucy', 18)
    print(p.__module__) # test

    四、​​__class__​​

  • 获取对象的类名(全称​​__main__.类名​​)
  • class Person(object):
    __slots__ = ('name', 'age', 'sex')

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


    p = Person('lucy', 18)
    print(p.__class__) # <class '__main__.Person'>

    五、​​__dict__​​

  • 以字典的形式,显示对象所有的属性
  • class Person(object):

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


    p = Person('lucy', 18)
    print(p.__dict__) # {'name': 'lucy', 'age': 18}

    六、​​__dir__()​​

  • 与​​dir(对象名)​​等价。查看一个对象支持的所有属性和方法
  • class Person(object):
    __slots__ = ('name', 'age')

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


    p = Person('lucy', 18)
    print(p.__dir__())
    print(dir(p))

    七、​​__setitem__​​方法

  • 不能直接把一个对象当做字典来使用
  • class Person(object):
    def __init__(self, name, age, city):
    self.name = name
    self.age = age
    self.city = city

    p = Person('张三', 18, '襄阳')
    # 我想把age修改成20,会报错
    p['age'] = 20 # [] 语法会调用对象的 __setitem__方法
  • 利用​​__setitem__​​方法,可以进行修改和添加属性
  • class Person(object):
    def __init__(self, name, age, city):
    self.name = name
    self.age = age
    self.city = city

    def __setitem__(self, key, value):
    self.__dict__[key] = value


    p = Person('张三', 18, '襄阳')
    p['age'] = 20
    p['sex'] = '男'
    print(p.__dict__) # {'name': '张三', 'age': 20, 'city': '襄阳', 'sex': '男'}

    八、​​__getitem__​​方法

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

    def __getitem__(self, item):
    return self.__dict__[item]

    p = Person('张三', 18, '襄阳')
    print(p['name']) # 张三

    九、​​__delitem__​​方法

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

    def __delitem__(self, key):
    print(f'删除的属性{key}')

    p = Person('张三', 18, '襄阳')
    del p['city'] # 删除的属性city



    Python中如何访问内置类的哪些属性?

    本文共计994个文字,预计阅读时间需要4分钟。

    Python中如何访问内置类的哪些属性?

    一、使用 __slots__ 优化类

    当类中定义了 __slots__ 后,Python 会为该类的实例预分配固定数量的属性,从而减少内存占用。以下是一个使用 __slots__ 的示例:

    pythonclass Person(object): __slots__=['name', 'age']

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

    p=Person('lucy', 18)p.city='上'

    二、不使用 __slots__ 的类

    如果不使用 __slots__,Python 会为每个实例动态创建属性,这样会导致内存占用增加。以下是不使用 __slots__ 的示例:

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

    p=Person('lucy', 18)p.city='上'


    一、​​__slots__​​

  • 类中没有​​__slots__​​属性时,可以进行动态添加属性
  • class Person(object):
    def __init__(self, name, age):
    self.name = name
    self.age = age


    p = Person('lucy', 18)
    p.city = '上海'
    print(p.city) # 上海
  • 当类中有​​__slots__​​​时,可以对属性进行控制。只可以设置​​__slots__​​中的属性,如果设置的属性不在范围内,会​报错​。
  • class Person(object):
    __slots__ = ('name', 'age', 'sex')

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


    p = Person('lucy', 18)
    p.sex = '男'
    p.city = '上海' # 报错
    print(p.sex) # 男

    二、​​__doc__​​

  • 类的文档信息
  • class Person(object):
    """
    这是类的文档信息
    """
    __slots__ = ('name', 'age', 'sex')

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


    p = Person('lucy', 18)
    print(p.__doc__) # 对象名.__doc__
    print(Person.__doc__) # 类名.__doc__

    三、​​__module__​​

  • 获取对象所在的模块
  • ​test.py中的代码如下:​

    class Person(object):
    __slots__ = ('name', 'age', 'sex')

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

    ​demo.py中的代码:​

    import test
    p = test.Person('lucy', 18)
    print(p.__module__) # test

    四、​​__class__​​

  • 获取对象的类名(全称​​__main__.类名​​)
  • class Person(object):
    __slots__ = ('name', 'age', 'sex')

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


    p = Person('lucy', 18)
    print(p.__class__) # <class '__main__.Person'>

    五、​​__dict__​​

  • 以字典的形式,显示对象所有的属性
  • class Person(object):

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


    p = Person('lucy', 18)
    print(p.__dict__) # {'name': 'lucy', 'age': 18}

    六、​​__dir__()​​

  • 与​​dir(对象名)​​等价。查看一个对象支持的所有属性和方法
  • class Person(object):
    __slots__ = ('name', 'age')

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


    p = Person('lucy', 18)
    print(p.__dir__())
    print(dir(p))

    七、​​__setitem__​​方法

  • 不能直接把一个对象当做字典来使用
  • class Person(object):
    def __init__(self, name, age, city):
    self.name = name
    self.age = age
    self.city = city

    p = Person('张三', 18, '襄阳')
    # 我想把age修改成20,会报错
    p['age'] = 20 # [] 语法会调用对象的 __setitem__方法
  • 利用​​__setitem__​​方法,可以进行修改和添加属性
  • class Person(object):
    def __init__(self, name, age, city):
    self.name = name
    self.age = age
    self.city = city

    def __setitem__(self, key, value):
    self.__dict__[key] = value


    p = Person('张三', 18, '襄阳')
    p['age'] = 20
    p['sex'] = '男'
    print(p.__dict__) # {'name': '张三', 'age': 20, 'city': '襄阳', 'sex': '男'}

    八、​​__getitem__​​方法

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

    def __getitem__(self, item):
    return self.__dict__[item]

    p = Person('张三', 18, '襄阳')
    print(p['name']) # 张三

    九、​​__delitem__​​方法

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

    def __delitem__(self, key):
    print(f'删除的属性{key}')

    p = Person('张三', 18, '襄阳')
    del p['city'] # 删除的属性city



    Python中如何访问内置类的哪些属性?