首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解Python类与对象(上)

详解Python类与对象(上)

作者头像
罗罗攀
发布2021-07-14 15:31:06
2830
发布2021-07-14 15:31:06
举报

前言

面试官:什么是类? 你:我这个人很实在,不知道什么叫累。 面试官:恭喜你,你被录取了。

开个玩笑啊,对于Python或者其他面向对象的语言来说,类与对象是我们绕不开的话题,而且相比于其他基础性语法,类与对象更加复杂,难学。本文将详细讲解类与对象的概念,使用方法,希望能对读者有所帮助。

基本概念

首先我们来看看面向对象的相关名词及相关解释。

  • 类:一群有着相似性的事物的集合,这里对应 Python 的 class。
  • 对象:集合中的一个事物,这里对应由 class 生成的某一个 实例(object)。

我们首先来举个简单的例子,动物是类,那狗、猫就是动物这个类的两个实例。

  • 属性:类似于变量,用来存储数据。
  • 方法:类似于函数,用来使用数据。

例如,动物都会有毛发颜色(属性),发出叫声的能力(方法)。

初体验

看完了基本概念,如果你还一知半解的话,没有关系,我们从Python中我们最常用的int类型出发,对面向对象来一个初体验。

i = 23
type(i)

<class 'int'>

我们这里的i其实就是int类的一个实例(或者叫对象),实例一般都有属性和方法,我们可以用dir来查看。

i = 1
print(dir(i))

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

这里总共有三种类型,第一种是前带两个下划线后带两个下划线的(魔法方法);第二种就是属性;第三种就是方法。属性和方法在这里是看不出来的。

i = 1
print(i.numerator)
print(i.bit_length())

1
1

调用属性不需要加括号,方法需要加括号,这很好理解,我们如果使用过函数就明白了。

以此类推,我们常用的列表字典等数据类型,也是一样的,大家也可以自己尝试用一用。

小试牛刀

我们再来看看上面我们举的案例,动物这个类,有属性和方法,本节我们就来实现这个类,我们先来看代码。

class Animal:

    def __init__(self, species, furcolor):
        self.species = species
        self.furcolor = furcolor
        print('create')

    def call(self):
        return '{} is calling'.format(self.species)


cat = Animal('cat', 'yellow')
dog = Animal('dog', 'gray')
print(cat.furcolor)
print(dog.call())

create
create
yellow
dog is calling

(1)定义类,需要用关键词class,类名词首字母大写。

(2)__init__是构造函数,实例化(生成对象)的时候,也就是cat = Animal('cat', 'yellow')的时候,就会直接调用该方法。第一个参数必须为self,表示创建对象本身。

(3)call函数参数也为self,是为了使用自身的属性。调用的时候是使用对象.方法,当然也可以用类.方法(对象)。 例如,arr.sum(),np.sum( arr )是一样的效果。

类变量

我们之前定义的变量都是对象的,我们本节定义类变量,例如动物的腿的个数。

class Animal:

    leg = 4

    def __init__(self, species, furcolor):
        self.species = species
        self.furcolor = furcolor

    def call(self):
        return '{} is calling'.format(self.species)


bird = Animal('bird', 'yellow')
dog = Animal('dog', 'gray')
print(bird.leg)
print(dog.leg)

4
4

需要注意的是,如果改变类变量,对象变量都会发生变化,如果改变的是对象变量,则类变量不发生改变。

bird = Animal('bird', 'yellow')
dog = Animal('dog', 'gray')
bird.leg = 2
print(bird.leg)
print(dog.leg)
print(Animal.leg)

Animal.leg = 6
print(bird.leg)
print(dog.leg)
print(Animal.leg)

2
4
4
2
6
6

今天的分享就到这了,下期我们将更加深入了解Python的类与对象。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 基本概念
  • 初体验
  • 小试牛刀
  • 类变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档