1.内置类属性:创建类的时候,系统默认为我们添加的类的属性
class Person:
"""说明文档:人类"""
# 类的字段
number = 61
# 对象属性
def __init__(self, name, age=0, gender='女'):
self.name = name
self.age = age
self.gender = gender
# ============方法==========
def object_func(self):
print('对象方法: '+self.name)
@classmethod
def class_func(cls):
print('类方法: ', cls.number)
@staticmethod
def static_func():
print('静态方法')
# 系统自带的魔法,可以定制当前类的对象的打印内容。实现这个函数的时候要求有一个字符串类型的返回值
# 影响单独打印对象的效果
# def __str__(self):
# return str(self.__dict__)[1:-1]
# 对象作为元素的时候的打印效果
def __repr__(self):
return ''
# def __repr__(self):
# return '' % (self.__class__.__module__, self.__class__.__name__, hex(id(self)))
p1 = Person('小明', 18, '男')
Person
说明文档:人类
{'__module__': '__main__', '__doc__': '说明文档:人类', 'number': 61, '__init__': , 'object_func': , 'class_func': , 'static_func': , '__repr__': , '__dict__': , '__weakref__': }
{'name': '小明', 'age': 18, 'gender': '男'}
__main__
(,)
(, )
p1:
[, ]
类别
内置类属性名
功能
调用方法(示例)
结果
字段
__name__
获取类的名字
print(Person.name, type(Person.name))
Person
字段
__doc__
获取类的说明文档
print(Person.doc)
说明文档:人类
对象属性
__class__
获取对象对应的类(你这个对象是哪个类的对象)
print(p1.class)
字段/对象属性
__dict__
获取类中所有的字段和对应的值,以字典形式返回(了解);获取对象中所有的属性和对应的值,以字典的形式返回(掌握!!)
print(Person.dict);print(p1.dict)
{'name': '小明', 'age': 18, 'gender': '男'}
字段
__module__
获取指定的类声明在哪个模块中,返回模块名(获取类所在的模块的name属性值)
print(Person.module)
main(当前执行的模块的__name__是__main__)
字段
__bases__
返回当前类的所有父类
print(Person.bases)
(,)(所有的类都是从object继承而来)
2.slots魔法
**可以通过给slots字段赋值来约束当前类有哪些对象属性;
当在类中给slots赋值后,当前类的对象的dict属性无效**
class Dog:
__slots__ = ('name', 'age', 'gender', 'name1')
def __init__(self, name, age=0):
self.name = name
self.age = age
self.gender = '公'
dog = Dog('大黄')
print(dog.__dict__) # 结果会报错,因为\_\_slots__魔法限制了对象属性,这时候无法调用\_\_dict__方法