当前位置 : 主页 > 编程语言 > python >

Python的内置类属性

来源:互联网 收集:自由互联 发布时间:2022-06-18
一、​​__slots__​​ 类中没有​​__slots__​​属性时,可以进行动态添加属性 class 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中单例设计模式
    下一篇:没有了
    网友评论