Python中的面向对象
面向对象:关键字class
面向对象编程:
所谓编程范式,就是程序员使用特定的语法+数据结构和算法编写代码,最终的目的是告诉计算机来解析并且来执行这些代码。
在编程范式的领域,主要分为面向过程的编程方式和面向对象的编程方式,具体如下:
·······面向过程,也就是说流程化的干一件事,严格的按照顺序来进行,很明显,这与目前的敏捷模式格格不入的。但是它是具备有点的,它的优点就是把复杂的问题流程化,进一步达到简单化的过程。所谓优点也是缺点,在这里体现的非常明显,正因为对进行了流程化,也就导致了一套流程只能解决一个问题,比如生产汽车的流水线等,它的可扩展性存在很大的缺陷,因此也就有了面向对象的编程方式。
·······面向对象的编程,在上帝的视角下,来审视时间万物,一切皆是对象,与面向过程的机械式的编程方式而言,面向对象的编程方式更加看重的是对象,而非过程。
面向对象:
1、类的自定义是用的关键字是 class
2、类的首字母必须是大写
3、目前学习的类都是新式类 python2当中是用的基本类
4、所有类的基类都是object,因此都是需要来继承的
5、面向对象的三大特性
5.1封装:对外部世界隐藏对象的工作细节
5.2继承:继承使子类具有父类的各种属性和方法,而不需要编写相同的代码。
5.3多态:
6、在OOP的编程中,如果要调用类里面的方法,首先需要对类进行实例化,实例化后的对象可以调用类的方法
数据类型可以理解为类里面的全局变量,它是属于类
实例属性可以理解为类里面的局部变量,它是属于对象
在python里面的封装体现是通过实例属性和数据属性来体现的
好处1:在我们调用的属性,隐藏了内部实现的细节
一个类不管是否构造方法,它都是有构造方法的,就像一个函数的返回值不管是否数学return的关键字
他都是有返回值的
下列代码

1 class Person(object): 2 #叫构造方法-->初始化类的过程 init 3 #name,age,sex为实例属性 #在函数中 name age sex 为形式参数 所有的形式参数在调用的时候都需要实际参数进行赋值 4 def __init__(self,name,age,sex): 5 self.name=name 6 self.age=age 7 self.sex=sex 8 9 def show(self): 10 print('my name is {0},and my age is {1},and my sex is {2}' 11 .format(self.name,self.age,self.sex)) 12 #对类进行一个实例化的过程,它的对象是obj 13 obj=Person(name='jiachao',age=18,sex='男') 14 obj.show()
在上述代码中 我们可以看到 def __init__(self,name,age,sex):当中
init叫构造方法 即构造方法-->初始化类的过程
name,age,sex为实例属性,
#在函数当中name.age,sex为形式参数 所有的形式参数在调用的时候都需要实际参数进行赋值
在obj=Person(name='jiachao',age=18,sex='男')当中
就是对类进行一个实例化的过程,它的对象是obj
1.在类当中我们有四种调用方法
普通方法
普通方法:在 def show(self,asd)当中的asd只作用于此函数当中
特性方法关键词:property
特性方法:也可以理解为只读属性,也就是说这个方法只具有读的属性,不具有写的属性
当一个方法我们只想获取它的值时并且这个方法里面不需要形式参数的时候那么这个方法我们可以定义成特性方法
静态方法关键词:staticmethod
静态方法只能使用类名来调用
类方法关键词classmethod
类方法也是只能使用类名来调用
代码演示以及书写方式

1 class Person(object): 2 #数据属性 实例属性到数据属性的过程叫封装 在class里面叫方法 3 country='中国' 4 #叫构造方法-->初始化类的过程 init 5 #name,age,sex为实例属性 #在函数中 name age sex 为形式参数 所有的形式参数在调用的时候都需要实际参数进行赋值 6 def __init__(self,name,age,sex): 7 self.name=name 8 self.age=age 9 self.sex=sex 10 11 def getName(self): 12 '''获取姓名''' 13 return self.name 14 15 def setName(self,name): 16 '''设置姓名''' 17 self.name=name 18 19 def getAge(self): 20 '''获取年龄''' 21 return self.age 22 23 def setAge(self,age): 24 '''设置年龄''' 25 self.age=age 26 27 def getSex(self): 28 '''获取性别''' 29 return self.sex 30 31 def setSex(self,sex): 32 '''设置性别''' 33 self.sex=sex 34 #普通方法 def show(self,asd)当中的 asd只作用于此函数当中 35 def show(self,asd): 36 print('my name is {0},and my age is {1},and my sex is {2},and my method params is {3}' 37 .format(self.name,self.age,self.sex,asd)) 38 39 #特性方法,又可以理解为只读属性,也就是说这个方法只具有读的属性,不具有写的属性 40 #当一个方法我们只想获取它的值,并且这个方法里面不需要形式参数的时候那么这个方法我们 41 #可以定义成特性方法 42 @property 43 def getNameAge(self): 44 return 'my name is {0},and my age is {1}'.format(self.name,self.age) 45 46 #静态方法,只能使用类名来调用 47 @staticmethod 48 def info(): 49 print() 50 51 #类方法也是只能使用类名来调用 52 @classmethod 53 def per(cls): 54 pass
class Person(object):
def __init__(self,name):
self.name=name
print('输出')
Person(name='jiachao')
在类里面的属性是需要赋值的,只有赋值过后才能进行输出
2.关于类的继承
java和python的继承有什么区别
java是单继承的,python是多继承的(也可以继承多个类)
所有类的基类都是object
基类(父类):被继承的类
派生类(子类):继承其他的类
子类继承了父类,那么也就是说子类继承了所有的父类的所有属性(数据属性&实例属性)和方法
注意事项:原则上来讲,继承一般不建议超过三代关系
子类继承父类的实例属性:
super().__init__(xingge)
方法重写:当子类的方法与父类的方法名一致的时候,就说子类重写了父类的方法
目的:父类的方法没有办法满足子类的诉求
2.1继承代码演示

1 class Father(object): 2 3 country='中国人' 4 5 def __init__(self,xingge): 6 self.xingge=xingge 7 8 def show(self): 9 print('性格是温和的') 10 11 class Son(Father): 12 def __init__(self,xingge,hobby): 13 self.hobby=hobby 14 super().__init__(xingge) 15 16 def show(self): 17 print('我的性格:{0},我的爱好:{1}'.format(self.xingge,self.hobby)) 18 19 obj=Son(xingge='温和的',hobby='登dua郎') 20 obj.show()
2.2关于继承顺序问题
2.2.1从自身开始的执行顺序

1 class Father(object): 2 3 country='中国人' 4 5 def __init__(self,xingge): 6 self.xingge=xingge 7 8 def show(self): 9 print('性格是温和的') 10 11 class Son(Father): 12 def __init__(self,xingge,hobby): 13 self.hobby=hobby 14 super().__init__(xingge) 15 16 def show(self): 17 print('我的性格:{0},我的爱好:{1}'.format(self.xingge,self.hobby)) 18 19 obj=Son(xingge='温和的',hobby='登dua郎') 20 obj.show()
2.2.2从上到下执行顺序

1 class Father(object): 2 3 country='中国人' 4 5 def __init__(self,xingge): 6 self.xingge=xingge 7 8 def show(self): 9 print('性格是温和的') 10 11 class Son(Father): 12 def __init__(self,xingge,hobby): 13 self.hobby=hobby 14 super().__init__(xingge) 15 16 def info(self): 17 print('我的性格:{0},我的爱好:{1}'.format(self.xingge,self.hobby)) 18 19 def show(self): 20 print('杰哥') 21 22 obj=Son(xingge='温和的',hobby='登dua郎') 23 obj.show()
2.2.3从左到右执行顺序

1 class Father(object): 2 3 country='中国人' 4 5 def __init__(self,xingge): 6 self.xingge=xingge 7 8 def show(self): 9 print('我是你爹') 10 11 class Mother(object): 12 13 def show(self): 14 print('我是你妈') 15 16 class Son(Father,Mother): 17 def __init__(self,xingge,hobby): 18 self.hobby=hobby 19 super().__init__(xingge) #子类将父类进行初始化,将父类的方法引用到子类,并且将子类的参数传回到子类的方法中进行引用 20 21 22 def info(self): 23 print('我的性格:{0},我的爱好:{1}'.format(self.xingge,self.hobby)) 24 25 def show(self): 26 print('杰哥') 27 28 obj=Son(xingge='温和的',hobby='登dua郎') 29 obj.show(
3.面向对象登录实战

1 class Login(object): 2 3 def __init__(self,username,password): 4 self.username=username 5 self.password=password 6 7 def out(self): 8 self.username=input('请输入账户:\n') 9 self.password=input('请输入账户密码:\n') 10 return self.username,self.password 11 12 def register(self): 13 username,password=self.out() 14 temp=username+','+password 15 with open('world.txt','w',encoding='utf-8') as f: 16 f.write(temp) 17 18 def login(self): 19 username, password = self.out() 20 with open('world.txt','r') as f: 21 lists=f.read().split(',') 22 if username==lists[0] and password==lists[1]: 23 print('登录成功') 24 else: 25 print('登录失败') 26 27 if __name__ == '__main__': 28 obj=Login(username='admin',password='admin') 29 while True: 30 try: 31 f=int(input('1.注册账号 2.登录账号 3.其他选项:\n')) 32 except: 33 continue 34 else: 35 if f==1: 36 obj.register() 37 elif f==2: 38 obj.login() 39 elif f==3: 40 break
关于类里面的三种方法之间的区别
1、@classmethod 用于调用类里面的方法且需要传递cls的属性
2、正常类里面的self 是调用的实例方法 传递self的属性
3、当我们类里面需要一个函数时 需要使用静态参数 @staticmethod 静态方法来解决
意思是 一个py模块里有两个类想同时使用一个函数的时候 这个时候我们就需要用到静态方法来解决 并且在self声明该函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!