一、__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