
文章目录1. 面向对象2. 魔法方法2.1 __init__魔法方法2.2 __str__魔法方法2.3 __del__魔法方法3. 面向对象三大特性3.1 封装3.2 继承3.2.1 单继承3.2.2 多继承3.3 多态3.3.1 多态实现3.3.2 伪多态4. 类属性和方法4.1 类属性4.2 类方法4.3 静态方法1. 面向对象python是一门面向对象的编程语言核心思想一切皆对象把对象定义成一个类#创建类classcar(object):#定义行为移动defmove(self):print(汽车正在移动)#创建一个对象car1car()car1.move()如上面定义一个类相当于只是设计一个汽车的图纸并不是真正的汽车只有创建一个对象后才是一个真正的汽车。self是python中一个关键字用于指向对象实例本身#创建类classcar(object):#定义行为移动defmove(self):print(self)car1car()car1.move()print(car1)结果D:\Anaconda3\python.exe C:\Users\15482\Desktop\PythonProject\for.py__main__.carobjectat0x0000012B880F4EC0__main__.carobjectat0x0000012B880F4EC0Process finishedwithexit code0一个类可以定义多个对象他们是相互独立的。#创建类classcar(object):#定义行为移动defmove(self):print(self)car1car()car2car()print(car1)print(car2)结果D:\Anaconda3\python.exe C:\Users\15482\Desktop\PythonProject\for.py__main__.carobjectat0x000001F019E74EC0__main__.carobjectat0x000001F019E58E10Process finishedwithexit code0他们的地址是独立的里面的成员也是独立的。2. 魔法方法2.1 __init__魔法方法该方法是类内的声明的用于初始化的方法。#创建类classcar(object):def__init__(self,color,price):self.colorcolor self.priceprice#定义行为移动defmove(self):print(self)car1car(red,100000)print(fcar1颜色{car1.color})print(fcar1价格{car1.price})该魔法方法只需要在对象实例化时可以传入参数自动调用该函数添加对象属性。2.2 __str__魔法方法该魔法方法实现return一个字符串当打印该类的对象时就会自动调用然后打印出返回的字符串。必须是一个字符串否则会报错。#创建类classcar(object):def__str__(self):return这是一个__str__调用#定义行为移动defmove(self):print(self)car1car()print(car1)结果D:\Anaconda3\python.exe C:\Users\15482\Desktop\PythonProject\for.py 这是一个__str__调用 Process finishedwithexit code02.3 __del__魔法方法del是 Python 的“对象销毁/终结”魔法方法在对象被垃圾回收前可能调用classUser:def__init__(self,name):self.namenameprint(创建对象)def__del__(self):print(f回收对象{self.name})userUser(小明)deluser需要注意del user 只是删除变量引用不保证立即执行del。执行时机取决于垃圾回收机制。程序退出时也不保证可靠执行。不要用它保存数据、关闭文件或释放重要资源。3. 面向对象三大特性3.1 封装封装就是将属性和函数方法都放到一个类中去实现只提供对外使用的接口不提具体的实现过程。私有属性私有成员函数和私有属性classUser:def__init__(self,name,age):self.namename self.__ageageprint(创建对象)defmy_name_and_age(self):print(self.name)self.__my_age()def__my_age(self):print(self.__age)xmUser(小明,22)xm.my_name_and_age()在函数和属性前面加上__就是定义私有只有类内部self可以调用内外面是无法直接调用的私有属性也无法被继承。3.2 继承3.2.1 单继承一个类可以通过继承得到另一个类的属性和方法。classperson(object):defwork(self):print(工作中)classteacher(person):deftest(self):passpython 中所有类都默认继承object类。在子类中扩展一些特有的属性和方法没有扩展继承就没有意义了。函数的重写classperson(object):defwork(self):print(工作中)classteacher(person):deftest(self):passdefwork(self):print(给学生上课)继承类的函数重写方法就是重写在子类定义一个同名的函数。super()通过super可以调用父类的函数方法减少实现代码量。classAnimal(object):def__init__(self,name,age):self.namename self.ageagedefintroduce(self):print(f我叫{self.name}我{self.age}岁了)classDog(Animal):def__init__(self,name,age,breed):super().__init__(name,age)self.breedbreeddefintroduce(self):super().introduce()print(f我是{self.breed}品种)kejiDog(旺财,6,柯基)keji.introduce()3.2.2 多继承3.3 多态同一个方法调用作用在不同类型的对象上会表现出不同的行为。3.3.1 多态实现classAnimal():defcall(self):print(动物叫)classDog(Animal):defcall(self):print(汪汪汪)classCat(Animal):defcall(self):print(喵喵喵)defdo(obj):obj.call()animalAnimal()dogDog()catCat()foriin(animal,dog,cat):do(i)3.3.2 伪多态C 通常依靠虚函数实现运行时多态Python 使用动态绑定只要对象具有对应方法即可不一定要求继承同一个父类。classDog:defspeak(self):print(汪汪)classCat:defspeak(self):print(喵喵)classRobot:defspeak(self):print(机器人发声)defmake_sound(obj):obj.speak()make_sound(Dog())# 汪汪make_sound(Cat())# 喵喵make_sound(Robot())# 机器人发声4. 类属性和方法4.1 类属性定义在类中由类和所有实例共享。推荐通过类名.属性访问和修改。实例.类属性 值通常会创建同名实例属性。4.2 类方法使用classmethod定义。第一个参数cls表示当前类。用于操作类属性或创建实例。4.3 静态方法使用staticmethod定义。不自动接收self和cls。用于存放与类相关但不依赖类或实例数据的工具函数。classStudent:school清华大学# 类属性classmethoddefchange_school(cls,school):cls.schoolschoolstaticmethoddefis_valid_age(age):return0age150Student.change_school(北京大学)print(Student.school)print(Student.is_valid_age(20))类属性存共享数据类方法操作类静态方法提供相关工具。