1、文字说明:
类和对象
类是具有相同属性和相同方法的的对象的集合,是抽象的
对象就是类的实例,是具体的
1.类的声明
类名要求是标识符,不能是关键字,首字母大写,驼峰式命名
class 类名:
类中的属性
类中的方法:1.对象方法(实例方法):
调用方式:对象.对象方法名()
2.类方法:
调用方式:类.类方法名()
3.静态方法
调用方式:类.静态方法名()
2.创建对象
类()
2. 具体实际使用:
class Person:
"""我是用来做今天的课后review的类和对象的例子的说明文档"""
# 类的字段
num = 60
# 约束当前类的对象的属性个数,可少不可多。
# __slots__ = ('name', 'age', 'sex')
# __init__方法,是对象方法,专门用来对创建的对象进行初始化
def __init__(self, name='', age=0, sex=''):
self.name = name
self.age = age
self.sex = sex
# 对象方法
def walk(self, distance):
print('%s今天走了%f公里' % (self.name, distance))
return '这个是调用对象方法的返回值'
# 类方法
@classmethod
def history(cls, time):
print('人类历史有%d万年' % time)
return '这是调用类方法的返回值'
# 静态方法
@staticmethod
def func1():
print('这是个静态方法')
# 打印对象的时候,通过__repr__方法可以让打印对象输出的内容为return后面的内容
def __repr__(self):
return str(self.__dict__)[1:-1] + ' object at' + hex(id(self))
def main():
# ===========对象方法==========
# 创建对象
p1 = Person('小明', 23, '男')
p2 = Person('小李', 18, '女')
print('==========调用对象方法')
# 调用对象方法,首先要有个对象
p1.walk(2.5)
print(p1.walk(42.195))
print('=========查找对象属性')
# 用'对象.属性名'的方法查找对象属性,如果没有这个属性就会报错
name = p1.name
age = p1.age
sex = p1.sex
print('用"对象.属性名"的方法来查找:%s, %d, %s' % (name, age, sex))
# 用'getattr(对象,属性名:str,默认值)'的方法查找对象属性,如果没有这个属性就返回默认值。
name = getattr(p1, 'name', None)
age = getattr(p1, 'age', None)
sex = getattr(p1, 'sex', None)
tel = getattr(p1, 'tel', '我是默认值')
print('用"getattr(对象,属性名:str,默认值)"的方法来查找:%s, %d, %s, %s' % (name, age, sex, tel))
print('==============对象属性增/改')
# 用'setattr(对象, 属性名:str, 值)'的方法,如果对象属性存在就修改,如果不存在就增加
# 如果用了__slots__方法,就不能随便增加对象属性了
setattr(p1, 'name', '小李')
setattr(p1, 'tel', 123456)
print('修改对象属性:', p1.name)
print('增加对象属性:', p1.tel)
print('============删除对象属性')
# del 对象.属性名
del p1.name
# delattr(对象,属性名:str)
delattr(p1, 'age')
print('==========类方法')
# 调用类方法,类.类方法名()
Person.history(2)
print(Person.history(2))
p1.__class__.history(2)
print('==========静态方法')
# 调用类方法,类.静态方法名()
Person.func1()
p2.__class__.func1()
print('=========内置属性')
# 类.__name__ - 获取当前类的名字(是个字符串)
print(Person.__name__, type(Person.__name__))
# 对象.__class__ - 获取对象的类,具有类的所有功能
print('我是类的字段num:', p2.__class__.num)
# 对象.__dict__ - 将对象转换成字典,对象属性名和值对应字典的键值对
# 注意:当给__slots__属性赋值后,对象的__dict__属性就不能使用
print('把对象属性转换成字典:', p2.__dict__, type(p2.__dict__))
# 类.__module__ - 获取当前类所在模块的模块名(字符串)
print('当前类所在模块名:', Person.__module__, type(Person.__module__))
# 类.__bases__ - 获取当前类的父类(返回元祖)
print('当前类的父类:', p2.__class__.__bases__, type(p2.__class__.__bases__))
# 类.__doc__ - 获取类的说明文档
print(Person.__doc__, type(Person.__doc__))
print('==============使用__repr__方法之后打印对象')
print(p2)
if __name__ == '__main__':
main()
网友评论