python面向对象编程
- 什么是面向对象?
类是一类具有同一特征的统称,如人类是一个类,张三、李四就是人类的某个具体对象。
利用(面向)对象(属性和方法)去进行编码的过程,就称为面向对象编程。面向对象编程是把构成事物的整个需求按照特点、功能划分,把这些存在共性的部分封装成对象,创建对象的目的不是为了完成某一个步骤,而是为了描述整个事物在整个解决问题的步骤中的行为。
python 中一切皆对象,比如变量也是对象,包括整型(int
)、浮点型(float
)、字符串(str
)、列表(list
)、元组(set
)、字典和集合(set
)。
面向过程:主要分析出解决问题所需要的步骤,用函数把这些步骤一步一步实现,使用的时候一个一个依次调用即可。
面向对象:主要找出问题中的共性问题,作为对象进行操作。
面向过程是一种以过程为中心的编程思想,面向对象是一类以对象为核心的编程思想。
- 类的定义与调用:
自定义对象数据类型就是面向对象中的类(class
)的概念,通过自定义类,可以实例化出具体的对象,类有自己的属性和方法,实例化出来的对象也具备类的属性和方法。
可以把类理解为一个模板,通过这个模板可以创建出无数个具体的实例。类是抽象的模板,而实例是根据类创建出来的一个个具体的对象,每个对象都拥有相同的方法。
类并不能直接使用,通过类创建出来的实例才能使用。类的所有变量称为属性,类的所有函数称为方法。方法和函数不同的是,方法至少要包含一个 self
参数,且方法无法单独使用,只能和类实例出来的对象一起使用。
python 中,使用关键字 class
来声明类,类的名称首字母大写,多单词情况下每个单词首字母大写,这就是“驼峰命名法”。
用法:
class ClassName(object):
attr = something
def 函数名(self):
函数具体实现代码块
return 返回值
示例:
# coding:utf-8
class Person(object):
name = 'xiaobai'
def sing(self):
print(f'{
self.name} can sing')
xxx = Person() #类的实例化
print(xxx.name) #通过实例化进行属性调用
xxx.sing() #通过实例化进行函数调用
结果:
xiaobai
xiaobai can sing
self
:
self
是一个对象,它代表实例化的变量自身。self
是类方法中的必传参数,且必须放在第一个参数位置。
定义类属性的变量可以不用加上 self
,但在定义类方法中的变量是必须要加上 self
的。self
中的变量与含有 self
参数的函数可以在类中的任何一个函数内随意调用。
如果在类中定义函数时加了 self
参数,那这个函数是类实例的方法,而不是类的方法。反之,如果在类中定义函数时没有加 self
参数,那这个函数就只是类的方法,而不是类实例的方法。
- 类的构造函数:
构造函数,是类中的一种默认函数,用来将类实例化的同时,将参数传入类中。构造函数应该定义在类中所有函数的最上面,作为类的第一个函数。
用法:
class ClassName(object):
def __init__(self, a, b): #构造函数
self.a = a
self.b = b
示例:
# coding:utf-8
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def sing(self):
print(f'{
self.name} can sing')
def study(self):
print(f'{
self.name}\'s age is {
self.age}, so he is an elementary school student')
xiaobai = Person('xiaobai', 10)
print(xiaobai.name)
xiaobai.sing()
xiaobai.study()
结果:
xiaobai
xiaobai can sing
xiaobai's age is 10, so he is an elementary school student
对于一个对象,构造函数 __init__
标志着对象生命的开始,系统会从内存中内配一个内存块给这个对象。析构函数 __del__
标志着对象生命的结束,它会删除对象,系统会从内存中释放这个内存块。
- 私有函数和私有变量:
私有函数与私有变量,就是无法被实例化后的对象调用的类中的函数与变量。
私有函数与私有变量,只希望类内部业务调用使用,不希望被使用者调用。因此,类内部可以调用私有函数与私有变量。
私有函数与私有变量,只需要在变量或函数前添加双下划线 __
来定义。尽量不要在实例化对象中直接调用私有函数和私有变量。
用法:
class ClassName(object):
def __init__(self, a):
self.a = a
self.__b = b #私有变量
def __函数名(self): #私有函数
函数具体实现代码块
return 返回值
示例:
# coding:utf-8
class Person(object):
def __init__(self, name):
self.name = name
self.__age = 10
def __sing(self):
return f'{
self.name} can sing'
def sing(self):
result = self.__sing()
return result
def __study(self):</