Python 之 面向对象

喜欢而已 提交于 2019-11-29 19:36:41

本篇文章重点讲解Python的面向对象,包括Python中如何定义类、对象、封装、继承、多态等

类、对象定义及使用

定义类:

			语法
			
					class  类名(父类):
					
					            代码块
					
			注意:()可有可无
			
			eg:
					
					class  Person:
					
					    #这是一个类

创建对象(实例):

			语法
			
					对象名=类名()
			
			注意:Java语言在实例化对象是,采用new关键字,而Python语言不需要。
			
			eg:
			
					person=Person()

isinstance()语法

isinstance()是检测一个对象是否是一个类的实例

			语法格式:
					
					isinstance(对象,类),结果返回True和False
			
			eg:
			
					isinstance(person,Person),结果为True

属性和方法

属性

属性:分为类属性和对象属性

属性修饰符:私有属性、公共属性

类属性

			class  Person:
			
			        name="张三"   #name是类属性

对象属性

			p1=Person()
			
			p1.name="张三"  #name是对象属性

类属性和对象属性的区别?

			类属性直接通过类名就可以调用,比如:
			
			Person.name
			
			对象属性必须通过对象名调用,比如:
			
			person.name

公共属性

没有任何修饰符,该类型的属性可以被任意一个对象所调用

			比如:
			
			name="张三"

私有属性

私有属性,不能通过对象调用,也不能通过类名调用,只能在本类中调用,类似Java语言中的private,如果想要在外部调用,则需提供get和set方法,私有属性通过双下划线修饰__

			eg:
			
			__name="张三"   #这是一个私有属性

方法

对象方法

定义在类中的函数被称为方法,所有的实例都可以访问

注意:对象方法,必须默认传递一个参数self,类似java中的this关键字

调用:只能通过对象调用

			eg:
			
					class Person:
					
					     def  eat(self):
					
					            代码块
			
			#调用
			
					person=Person()
					
					person.eat()

类方法

@classmethod 修饰的方法,被称为类方法

参数:cls

调用:可以通过类调用

			eg:
			
					@classmethod
					
					def sleep(cls):
					
					        print("睡觉")
			
			#调用
			
					Person.sleep()

静态方法

@staticmethod 修饰的方法,被称为静态方法

参数:无参数

调用:可以通过类和对象调用

			@staticmethod
			
			def playDD():
			
			    print("打豆豆")
			
			#调用
			
			Person.playDD() #类名调用
			
			person.playDD() #对象调用

构造方法

构造方法 是以双下划线__开头,双下划线__结尾,方法名叫init,构造方法不需要自己调用,在实体化对象时调用,和Java中的构造方法一样

			语法格式:
					
					def  __init__(self,参数):
					
					    代码块
					
			eg:
			
					def  __init__(self,name,age):
					
					        self.__name=name
					
					        self.__age=age

封装

封装,是给类中的属性提供get、set方法

			语法格式:
					
					def  set方法(self):
					
					    代码块
					
					def  get方法(self):
					
					    代码块
			    
			eg:
			
					def  setName(self,name):
					
					    self.__name=name
					
					def  getName(self):
					
					    return self.__name

get、set装饰器

get方法装饰器:@property

set方法装饰器:@属性名.setter

调用:直接通过对象.属性名即可

注意:get方法修饰器必须写到set方法修饰器前面

			eg:
			
			@property
			
			def name(self):
			
			    return self.__name
			
			
			
			@name.setter
			
			def name(self,name):
			
			    self.__name=name

继承

继承语法:

			class  子类(父类1,父类2):
			
			通过语法格式可以看出Python语言支持多继承,Java语言只支持单继承

issubclass()

			issubclass()方法作用:
			
			检测一个类是否是另外一个类的子类
			
			语法:
			
			issubclass(子类,父类)

方法重写

像Java语言一样,Python语言也同样支持方法的重写override

多继承

查看一个类的继承关系使用:

类名.__bases__属性

多继承特点:

一层一层获取,先找自己的类中,再从继承关系中找


多态

多态 的概念,和Java中的概念是一样的。可以看下面的例子理解,或者看视频教程

			class Person:
			
			def __init__(self,name):
			
			    self.__name=name
			
			
			
			@property
			
			def name(self):
			
			    return self.__name
			
			@name.setter
			
			def name(self,name):
			
			    self.__name=name
			
			
			
			class Boy:
			
			def __init__(self,name):
			
			    self.__name=name
			
			
			
			@property
			
			def name(self):
			
			    return self.__name
			
			@name.setter
			
			def name(self,name):
			
			    self.__name=name
			
			
			
			class Girl:
			
			    pass
			
			
			
			def eat(obj):
			
			    print("%s正在吃饭"%obj.name)
			
			p=Person("战三")
			
			b=Boy("小孩子")
			
			g=Girl()
			
			eat(g),参数p、b都没有问题,但是g就会有问题
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!