python之面向对象
2022/7/28 1:52:58
本文主要是介绍python之面向对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
对象的独有功能
# 上一篇我们学习了对象的独有数据,现在讲讲对象的独有功能/也称方法 class Person: school = '蓝翔挖掘机炒菜学校' def __init__(self, name): # 让对象拥有独有数据的函数一般建议写在公共方法上面 self.name = name # 让对象拥有独有数据 def eat(self): print('%s说用挖掘机炒菜真香!!!!'%self.name) # 对象公共功能 ,但是对象调用的话就会将对象本身当作第一个参数传入,可以当作是对象的独有功能 res1 = Person('summer') res1.eat() # summer说用挖掘机炒菜真香!!!! res2 = Person('jaja') res2.eat() # jaja说用挖掘机炒菜真香!!! 类名直接调用公共功能的话是会报错的,必须要传对应的参数进去 Person.eat() × res3 = Person('jason') Person.eat(res3) # jason说用挖掘机炒菜真香!!!!
动静态方法
# 专门在类体中编写的函数分为三个方法 1.绑定给对象的方法 eg: class Person: school = '蓝翔挖掘机炒菜学校' def stu(self): # 绑定给对象的方法 print('上课越来越认真了啊!!',self) res = Person() res.stu() # 上课越来越认真了啊!! ------------ 2.绑定给类的方法 class Person: school = '蓝翔挖掘机炒菜学校' def stu(self): # 绑定给对象的方法 print('上课越来越认真了啊!!',self) @classmethod # 想让类调用的话需要用这个装饰器 def cooking(cls): # 绑定给类的方法 print('挖掘机炒菜功能越来越6了') rea = Person() Person.cooking() # 挖掘机炒菜功能越来越6了 <class'__main__.Person'> res = Person() res.stu() # 上课越来越认真了啊!! res.cooking() #挖掘机炒菜功能越来越6了 <class '__main__.Person'> 3.普通函数(也是静态方法) @staticmethod # 需要用装饰器 # 静态方法 def run(a,b): print('我爱挖掘机') rea = Person() Person.run(1,2) # 我爱挖掘机 res = Person() res.run(1,3) # 我爱挖掘机
动静态方法总结
1.绑定给对象的方法 使用self 直接让对象自身当作第一个参数传入 2.绑定给类的方法 @classmethod 加语法糖 将类名本身当作第一个参数传入 而对象来调用绑定给类的方法时,会自动将产生该对象的类作为第一个参数传入 3.静态方法 @staticmethod 加语法糖 就是函数本身了,调用的时候括号内有几个参数就需要传几个参数,不管是对象还是。
面向对象三大特性之继承
面向对象三大特性分别是: 继承、封装、多态 # 写法 class 类名(类名): pass 1.定义类的时候在类名后加括号 2.括号内填写你需要继承的类名 3.括号内可以填写多个父类 逗号隔开即可 class C: house3 = 5 def money3(self): print('不好好上课回家继承家业') class person(C): # 定义继承类名的不用写冒号直接写括号加上需要继承的类 pass print(person.money3) person.money3(1) # 不好好上课就回家继承家业 # 继承了类体内的所有代码 我们将被继承的类称之为: 父类或基类或超类 eg:上述的c 我们将继承类的类称之为: 子类或派生类 eg:上述类person ps:平时最常用的就是父类和子类
继承的本质
class people: def __init__(self, name, age, hobby): self.name = name self.age = age self.hobby = hobby class teach(people): pass class Student(people): def choice(self): print('正在选课') teh = teach('sum',38,'shopping') print(teh.__dict__) # {'name': 'sum', 'age': 38, 'hobby': 'shopping'} stu1 = Student('summer',18,'read') print(stu1.__dict__) # {'name': 'summer', 'age': 18, 'hobby': 'read'} ------------ 对象:数据和功能的结合体 类:多个对象相同的数据和功能的结合体 父类:多个类相同的数据和功能的结合体 ps:类和父类最主要的功能其实就是节省代码
数据和方法的查找
不继承查找顺序
先从对象自身查找 没有的话 再去产生该对象的类中查找 class Student(): def choice(self): print('正在选课') res = Student() res.choice() # 正在选课
单继承查找顺序
# 只要涉及到对象查找名字 几乎要回到最开始的位置依次查找 class A1: def func1(self): print('from A1 func1') def func2(self): print('from A1 func2') self.func1() # obj.func1() class MyClass(A1): def func1(self): print('from MyClass func1') obj = MyClass() obj.func2() # from A1 func2 from MyClass func1
多继承查找顺序
# 继承多类 class A: house = 10 def money(self): print('不好好上班就回来继承家业') class B: house = 5 def money(self): print('不好好上学就回来种红薯') class C: house = 5 def money(self): print('不好好上课就回村捡破烂') class person(A, B, C): def money(self): print('好好学习天天向上') print(person.money) person.money(1) # 多继承的话是按照继承的名称从左到右依次查找的 # 如果自己有的话就打印自己的:好好学习天天向上 # 如果自己没有A有的话就继承A:不好好上班就回来继承家业 # 如果A没有的话就继承B:不好好上学就回来种红薯、 # 如果AB都没有的话就继承C:不好好上课就回村捡破烂 ps:我这就是为了更直观的看出继承查找顺序写的类体代码,实际的继承本质是为了节省代码
经典类与新式类
经典类 不继承object或其子类的类(什么都不继承) # 在python2中 类不加object的话用句点符是点不出class该有的一些方法,必须要加上object才可以调用它的内置方法 python2中需要这么写: class MyClass(object): def func1(self): print('from MyClass func1') 新式类 继承了object或其子类的类 class MyClass(): # 等同于这么写 class MyClass(object) def func1(self): print('from MyClass func1') # 在python3中所有的类默认都会继承object ,也就是说python3里面只有新式类 object里面几乎都是类具备的功能 ,我们在调用class的时候其实是在调用object方法,因为class继承了object
派生方法
子类中定义类与父类一模一样的方法并且扩展了该功能>>>:派生 class people: def __init__(self, name, age, hobby): self.name = name self.age = age self.hobby = hobby class teach(people): def __init__(self,name, age, hobby,job): super().__init__(name, age, hobby) # 专门用于子类调用父类的方法 self.job = job # 自己再增加想拥有的属性 class Student(people): def __init__(self,name, age, hobby,score): # 专门用于子类调用父类的方法 super().__init__(name, age, hobby) self.score = score # # 自己再增加想拥有的属性
这篇关于python之面向对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南