1.什么是类,什么是对象?
类就是拥有相同属性和相同功能的对象的集合
对象就是类的实例
2.定义类
语法: class 类名(): 类的说明文档 类的内容(包含属性和方法) 说明: class - 关键字 类名 - 自己命名 要求:不能是关键字 规范:驼峰式命名,并且首字母大写3.定义对象(创建对象)
语法: 类() 说明: 类名 - 是已经定义好的类的类名类中的方法分为三种:对象方法、静态方法、类方法
1.对象方法
怎么定义:直接定义在类中的函数就是对象方法
特点:自带参数self(self在通过对象调用的时候不用传参,系统会自动将当前对象传给self)
怎么调用:用对象去调用(对象.方法名())
2.类方法
怎么定义:定义函数前加装饰器 @classmethod
特点:自带参数cls (cls指向当前类)
怎么调用:用类调用 ( 类.方法名() )
3.静态方法
怎么定义:在定义函数前加装饰器 @staticmethod
特点:没有默认参数
怎么调用:用类调用 ( 类.方法名() )
class Dog: # eat 是对象方法 def eat(self): print('狗啃骨头') # count是类方法 @classmethod def count(cls): print('狗的数量是:100') @staticmethod def func(): print('静态方法') # 创建对象 dog1 = Dog() # 用对象调用对象方法 dog1.eat() # 用类调用类方法 Dog.count() # 用类调用静态方法 Dog.func()注意:从本质上讲,类中的所有的方法都可以用对象和类调用,但是不能这样做
Dog.eat()如果用类来调用对象方法,self就会变成普通的参数,没有存在的价值
dog1.count()用对象调用类方法的时候cls指向的还是类
1.什么是构造方法?
构造方法:函数名和类名是一样的,用来创建对象的方法就是构造(python中的构造方法在定义类的时候,系统已经自动创建好了)
2.init方法
__init__方法又叫初始化方法,用来在创建对象的时候对对象进行初始化操作的.
当我们通过类创建对象的时候,系统会自动调用__init__方法来对创建出来的对象进行初始化.
调用构造方法创建对象的时候需不需要参数,需要几个,看被自动调用的__init__.
class Person: def __init__(self): print('初始化方法') p1 = Person() p2 = Person() # 初始化方法 # 初始化方法这里在创建对象的时候就会自动调用__init__方法
1.对象属性
对象属性:对象属性会因为对象不同而不一样
①对象属性定义在init方法中
②以self.属性名 = 值 的方式定义
③通过 对象.属性名的方式使用属性
class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def eat(self): print('{}吃饭'.format(self.name)) p1 = Person('张三', 18, '男') # 创建一个p1 Person对象 print(p1.name) # 获取p1对象的name属性 p1.eat() # 调用p1的eat方法2.类属性
直接定义在类中的变量就是类属性
类属性的值不会因为对象不同而不一样
class Dog: num = 100 # 定义狗的数量为100,这里的num就是类属性python中类的对象的属性支持增删改查
class Student: def __init__(self, name, age=0, gender='男', score=0): self.name = name self.age = age self.gender = gender self.score = score def __repr__(self): return '<{}>'.format(str(self.__dict__)[1:-1]) stu1 = Student('小明') stu2 = Student('小花')1.查(获取属性的值)
语法: 对象.属性 - 获取对象指定属性相应的值;属性不存在会报错 getattr(对象,属性名) - 获取对象指定属性对应的值,属性不存在会报错 getattr(对象,属性名,默认值) - 获取对象指定属性对应的值,属性不存在返回默认值 print(stu1.name) # 小明 print(stu1.height) # 这里stu1不存在height属性,报错 print(getattr(stu1, 'name')) # 小明 print(getattr(stu1, 'age')) # 0 print(getattr(stu1, 'name1', '小新')) # 小新 那么既然我们可以直接用对象.属性名的方式获取对象属性,那么getattr在这里存在的意义到底是什么呢?仅仅是为了让对象属性不存在的时候返回默认值吗?当然不是
请看下面这个需求,让我们进一步了解getattr存在的意义
例:根据输入的内容获取对象属性的值(name,age,gender,score)
value = input('请选择要获取的属性(name,age,gender,score):') # 然后直接 对象.value 来获取吗? 这里会直接报错,因为value是个字符串 # 这里就体现了getattr的进一步用法: print(getattr(stu1, value)) # 这样我们就可以满足我们的需求,更加方便的获取到对象的属性2.改、增
对象.属性 = 值 - 当属性不存在就给对象添加属性,属性存在的时候就修改指定属性的值 setattr(对象,属性名,值)- 当属性不存在就给对象添加属性,属性存在的时候就修改指定属性的值 stu1.name = 'xiaoming' print(stu1) setattr(stu1, 'weight', 80) print(stu1) # 没有这个属性,添加weight这个属性并赋值3.删
del 对象.属性 - 删除对象中指定的属性,没有这个属性会报错 delattr(对象,属性名) - 删除对象中指定的属性,没有这个属性会报错 del stu2.age print(stu2) delattr(stu2, 'gender') print(stu2) # 两种方法都能满足删的需求