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()
View Code
复制代码

在上述代码中 我们可以看到 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
View Code
复制代码

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()
View Code
复制代码

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()
View Code
复制代码

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()
View Code
复制代码

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(
View Code
复制代码

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
View Code
复制代码

 关于类里面的三种方法之间的区别

1、@classmethod 用于调用类里面的方法且需要传递cls的属性

2、正常类里面的self 是调用的实例方法 传递self的属性

3、当我们类里面需要一个函数时 需要使用静态参数 @staticmethod 静态方法来解决

意思是 一个py模块里有两个类想同时使用一个函数的时候 这个时候我们就需要用到静态方法来解决 并且在self声明该函数

posted on   钢镚芽儿哟  阅读(76)  评论(0编辑  收藏  举报

编辑推荐:
· 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框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示