Python的面向对象编程是一种编程范式,它使用“对象”来设计应用程序和系统的结构。在面向对象编程中,程序被组织成对象的集合,这些对象通过发送消息来彼此通信。Python是一种完全支持面向对象编程的语言,我们来看两个面向对象编程的核心概念:
【类(Class)】
类是对象的蓝图或模板,它定义了对象具有的属性和方法。你可以将类视为一个对象的类型或种类。通过类,你可以创建(或称为“实例化”)多个具有相同属性和方法的对象。
【对象(Object)】
对象是类的实例,具有类定义的属性和方法。每个对象都是独一无二的,有自己的内存空间,并且可以独立地接收消息、处理数据和发送消息。
或者,我们简单理解,类就像是模具,对象是产品
我们在类里面设计产品的形状和样式,设计好后,再放入材料,把对象加工出来
【定义类】
在Python中,类的定义使用class + 类名 来实现,语法如下:
class ClassName:
…
【类的实例化】
定义类以后,要实例化才会创建一个对象(有点类似于函数的定义和使用)
类的实例化语法如下:
ClassName(参数)
例如:
class animal:
pass
cat=animal()
上例中定义了一个animal的类,并用animal类实例化了一个cat对象
【魔法函数__init__()】
python中有一类魔法函数(也称为特殊函数)
它们是Python中预定义的方法,以两个下划线(__)开头和结尾
这些函数为Python的类提供了丰富的功能和灵活性,允许它们以特定的方式响应内置的操作和函数
魔法函数是一个特殊的函数,被用作类的初始化函数
例如:
class student:
def __init__(self, name,major):
self.name = name
self.major = major
在上面的例子中我们定义了一个叫student的类
并使用__init__()函数为两个对象self.name、self.major设定了初始值为参数name和major
需要注意的是,__init__()函数的第一个参数必须为self,这是固定写法
在Python中,类成员包括属性和函数,这些成员定义了类的状态和行为
这里的self.name和self.major被称为类的属性
【实例属性】
类的属性是与类相关联的变量,用于存储类的状态信息
分为实例属性和类属性
实例属性是定义在类的实例上的属性。它们通常是在类的__init__方法被创建和初始化的
在__init__函数定义中,类属性用 self.属性名 作为前缀,表明是类自身的属性
在类定义的外部,使用 类名.属性名 来访问实例属性
下面来看一个完整的使用__init__()函数的例子
# coding: utf-8
class student:
def __init__(self, name,major):
self.name = name
self.major = major
stuA=student('Jim Green','Math')
print(stuA.name)
print(stuA.major)
这里,我们首先定义了student类
然后使用__init__函数定义了student类的初始化方式
分别用name、major参数的值初始化self.name、self.major两个实例属性
随后,使用student类创建了一个stuA实例,两个参数分别为字符串'Jim Green'、'Math'
最后使用stuA.name、stuA.major分别访问了该实例的两个实例属性
【类属性】
类属性是定义在类本身上的属性,而不是在类的实例上。它们通常是在类定义时直接创建的
当类属性被修改时,所有的实例都会看到这个变化,因为它们共享同一个类属性
# coding: utf-8
class student:
var1 = 'student'
def __init__(self, name,major):
self.name=name
self.major=major
# 创建实例
stuA= student('Ann','Math')
stuB =student('Bob','Art')
# 访问类属性
print(stuA.var1)
print(stuB.var1)
# 修改类属性
student.var1 = 'teacher'
print(stuA.var1)
print(stuB.var1)
可以看到第一次打印stuA.var1和stuB.var1时,两个实例的var1类属性都为student
当我们对student类的var1赋值为teacher时
再次打印两个实例的var1类属性时,结果都变为了teacher
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。