python的类,用类创建一个精通算术并能展示肖像的人

python的类是什么

我们该如何给python的类来下一个通俗易懂的定义呢?据个人经验和总结,认为python的类是一个容器,封装了那些用来描述现实生活中的事物(对象)及其各种各样的特征属性、行为方式的python代码封装起来。


python类的基本结构

class ClassName (ParentClassList):
    pass

类的基本结构解析

  • 类用关键词class来定义;
  • ClassName为类名,约定俗成的命名方式是驼峰式的,即每一个单词的首字母大写;
  • ParentClassList为父类列表,用英文的括号“()”括起来——python的类可以采用继承的机制(继承和多态后面的章节会介绍);
  • 若是ParentClassList为空,也就是括号里头没有内容,则该类默认继承object类,注意,object类是所有类的基类;
  • 括号后面必须跟随冒号“:”,否则会抛出错误;
  • pass部分为类所封装的我们所要抽象的现实中的“事物”的属性特征、行为方式等,注意严格的缩进。

用python类创建一个精通算数并展示肖像的人

上一节中,我们在打怪的游戏当中创建了一个NPC的类,并默认继承object类,这节当中,我们来设计一个更能展示的类特性的类程序,同样默认继承object类。代码如下:

from PIL import Image #导入用于打开图片的库
import time
class Person():
    
    id_address = '地球' #类变量

    def __init__(self, name, ID, portraitpath): #类实例的初始化
        self.name = name #实例变量
        self.ID = ID
        self.portrait = Image.open(portraitpath)
    
    def arithmetic(self, a,b,c): #类实例方法
        print('%s精通加减乘除的算术'%self.name)
        time.sleep(1)

        if b == '+':
            print('%s + %s' %(a,c))
            time.sleep(1)
            print('=%s' %(a+c))
        elif b == '-':
            print('%s - %s' %(a,c))
            time.sleep(1)
            print('=%s' %(a-c))
        elif b == '*':
            print('%s x %s' %(a,c))
            time.sleep(1)
            print('=%s' %(a*c))
        elif b == '/':
            print('%s ÷ %s' %(a,c))
            time.sleep(1)
            print('=%s' %(a/c))
    
    @classmethod #类方法,注意参数和类实例方法的参数的区别
    def person_func(cls):
        print('人类居住在%s' %cls.id_address)
    
    @staticmethod #类的静态方法,注意参数
    def plant_atrr():
        print('植物可以光合作用,与人类不同!')

xiaopeng = Person('小彭','123456789','/path/pengyuyan.jpg') #类的实例化,其中的path可以用绝对路径
xiaohu = Person('小胡','213456789', '/path/huge.jpg')
print(xiaopeng.name)
print(xiaohu.name)
print(xiaopeng.id_address) #分别通过类的实例xiaopeng和xiaohu的来调用类变量id_address
print(xiaohu.id_address)
xiaopeng.portrait.show()
xiaopeng.arithmetic(1,'/',5)
xiaohu.arithmetic(1,'/',5)
Person.person_func() #调用
Person.plant_atrr()
————————————————————————————————————————
代码输出:
小彭
小胡
地球
地球
图片(计算机会利用操作系统默认的图片预览工具弹出图片,而不是在终端输出)
小彭精通加减乘除的算术
1 ÷ 5
=0.2
小胡精通加减乘除的算术
1 ÷ 5
=0.2
人类居住在地球
植物可以光合作用,与人类不同!

实例代码解析

如上代码,我们需要注意几个概念,分别是类变量、实例变量、初始化函数、类实例方法、类方法、静态方法,下面我们将一一解析:

  • 类变量:注意上面的注释中,我们分别用了两个不同的类实例xiaopeng和xiaohu来调用id_address,输出的内容都是“地球”,由此说明类变量是类的所有实例都具备的属性;
  • 实例变量:注意上面注释内容中初始化函数底下的self.name及其他的,就是实例变量,会根据类实例化的时候传递的不同参数而发生变化,就像上面xiaopeng.name和xiaohu.name会输出不同的名字;
  • 初始化函数:上面的代码中,我们用xiaopeng = Person('小彭'...)来进行类的实例化,并赋值给变量xiaopeng,该过程就像我们新建word文档并保存一样,创建了一个Person“文件”(实例),并通过__init__()函数进行初始化,就相当于调用了一个函数来声明self.name、self.ID等变量;
  • 类实例方法:创建类的实例方法跟创建python的其他函数基本一样,不同的是参数不同,必须传递self参数,就是传递类对象本身,可以理解为这样做的目的就是为了将类实例方法跟类实例进行绑定,称为一体,就像人精通算术是人的属性,是跟人一体的;
  • 类方法:我们可以注意到,调用类方法和调用类的实例方法是不同的,创建类方法必须用@classmethod来装饰,并传递一个cls参数,相当于self;类方法就相当于类的方法,跟类实例没太大关系,不信的话,大家可以在类实例化之前,用Person调用person_func()类方法,一样可以调用;
  • 类的静态方法:通过上面代码中,我们定义的类的静态方法,我们可以了解到静态方法的函数除了需要用@staticmethod来装饰之外,跟创建其他的python函数没什么两样,可以传递参数,也可以不传递,可以理解为该方法跟类和实例都没太大关系,调用方法跟类方法类似。

好了,python的类就先介绍到这里,下一章节我们将继续介绍python类的继承和多态。


全栈后端 / python教程 :


























Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.