类的基本介绍
文章目录
一、类的定义
1.1、什么是类
类(Class): 类即类别、种类,是面向对象设计最重要的概念。用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
1.2、类的定义语法
class ClassName:
<statement-1>
.
<statement-N>
1.3、代码示例
我们都属于人类,那么来定义一个简单的Person类,代码如下:
class Person: # 定义一个Person类
pass
1.4、说明
关键字class
是定义类的关键字,类名称一般是大写开头。
二、类的实例化
2.1、什么是类的实例化
在Python中像函数一样调用类,语法:类名(), 比如Person()。我们称为实例化。
2.2、代码示例
class Person:
pass
Person() # 类实例化
2.3、说明
通过实例化,可以等到一个类的对象。
三、类的对象(实例)
3.1、什么是类的对象
前面讲实例化的时候提到,类的实例化,可以得到一个类的对象。我们就可以将得到后的对象赋值给一个变量。这个变量就是类的对象了。
3.2、代码示例
class Person:
pass
p1 = Person()
p2 = Person()
print(type(p1), id(p1))
print(type(p2), id(p2))
输出结果
<class '__main__.Person'> 4466521704
<class '__main__.Person'> 4466635216
3.3、说明
一个类可以有多个对象,就像人类中包含了你我一样。我们通过多次实例化,就可以得到多个类的对象了。
四、类的实例变量
4.1、什么是类的实例变量
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
你,我和他虽然都是人类,但我们之间是有差异,比如,我们都有名字,但名字都不相同。那么该如何给p1,p2定义名字?
4.2、代码示例
- 方法一:给实例化后的对象添加,对应属性,比如名字name。如下代码。
class Person:
pass
p1 = Person()
p2 = Person()
p1.name = '张三' # 给实例化对象p1绑定name属性
print(p1.name) # 打印结果为 张三
但方法一有他的局限性,目前只有p1和p2,假如是很多个了,而且要添加的属性不只是名字呢?请看方法二。
- 方法二:给类添加构造方法(推荐方法)
class Person:
def __init__(self, name, age):
self.name = name # 实例变量
self.age = age
p1 = Person('张三', 18)
p2 = Person('李四', 19)
print(p1.name, p1.age)
4.3、说明
- 类的实例变量使用是通过类实例对象+.方法,比如
p1.name
- 如果是使用构造方法的,在实例化的时候,只需要传参self之后的参数,且传对应参数与个数必须与定义一致,同函数的传参规则一致,否则会报构造放错误,如下
TypeError: __init__() missing 1 required positional argument: 'name'
- self代表类的实例本身,而非类。你实例化时python解释器会自动把这个实例本身通过self参数传进去。
五、类的变量
5.1、什么是类的变量
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
场景描述:
我们还是以人类为了,所有人都是哺乳动物,我们添加这个变量物种(species)为人类(human)
5.2、代码示例
class Person:
species = 'human' # 物种:人类(类变量)
def __init__(self, name, age):
self.name = name # 实例变量
self.age = age # 实例变量
p1 = Person('张三', 18)
p2 = Person('李四', 19)
print(p1.name, p1.age, p1.species, id(p1.species))
print(p1.name, p1.age, p1.species, id(p2.species))
输出结果
张三 18 human 4317885920
李四 19 human 4317885920
5.3、说明
- 类变量使用是通过类实例对象+.方法,比如
p1.species
- 类变量使用的是同一块内存空间,输出结果的id是一样即证明。
- 由于实例变量优先级比类变量高,因此,在访问的时候先访问实例变量,如果没有才方法类变量。在实际运用中,不建议对实例属性和类属性使用相同的名字。
六、类的方法
6.1、什么是类的方法
类中定义的函数。在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
场景描述:
我们每一个人都能说话,我给每个人添加一个方法,来告知我叫什么,多大。
6.2、代码示例
class Person:
species = 'human' # 物种:人类
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name, self.age))
p1 = Person('张三', 18)
p1.speak()
输出结果
张三 说: 我 18 岁。
6.3、说明
类方法的使用是通过类实例对象+.方法(),像运行函数一样()运行,比如p1.speak()