Python面向对象 A-02 类的基本介绍

类的基本介绍

一、类的定义

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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值