注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十六章: Python面向对象 > 16.3节: 类属性,类方法,静态方法

16.3节: 类属性,类方法,静态方法

薯条老师 2022-11-24 14:08:52 1731 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学,可以报名线上直播班,与线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

16.3.1 class关键字与类

将对象传递给type函数时,可以输出对象的类型名:
>>> number = 1
>>> type(number)
<class 'int'>

从type的输出中,可以看到一个class的标识符。class是Python中的关键字,同学们可以在交互模式中执行help('keywords'), 即可输出中可以找到class关键字。整型,字符串类型,布尔类型,以及列表,元祖,字典,集合等复合数据类型皆是Python预定义的数据类型。在Python中通过class关键字,可自定义一个数据类型。

使用class自定义的数据类型就叫做类。

使用class定义类的基本语法:

class ClassName:
    """desc"""
    pass
ClassName表示自定义的类型名,在Python中通常使用驼峰命名法来定义类名。由class和类名组成的叫做类头(class header),在冒号下方的叫做类体(class body)。

16.3.2 类的命名规范

为类取名时,它首先必须符合变量名的基本语法,此外,类名还应当符合以下两个重要的规则:
(1) 良好的可读性
类的名称要有意义,有较强的可读性,类名尽量用英文单词来进行命名。
(2) 驼峰式命名法
在驼峰式命名法中,单词的首字母都为大写。

16.3.3 类属性与类方法

(1) 类属性
在16.2节的内容中,讲到了类属性表示的是这种数据类型的共有特征。定义类属性的语法很简单,直接在类体中定义类属性。

在类体中定义类属性和类方法时,要注意代码缩进。

代码实例:

# 定义一个Cat类,在类体中定义类属性
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "cat"
(2) 类方法
类方法表示该数据类型共有的行为。类方法的定义很简单,在类体中通过def来定义一个函数。在函数前得加上@classmethod修饰符,classmethod的中文释义就表示类方法。此外,在类方法中至少要定义一个参数,Python解释器会自动将第一个参数绑定为当前的类类型。
在Python中,通常将类方法中的第一个参数命名为cls,cls是class的简写形式。

代码实例:

#__desc__ = 定义一个Dog类,在类体中定义类方法
 
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def cry(cls):
        pass
在执行类方法时,无需显式地传递类类型作为参数,Python解释器会自动进行绑定。
在Python中通过成员操作符.来访问类或对象中的属性和方法。

访问类属性和类方法可以直接通过类型名来进行访问:

# __desc__ = 直接通过类型名来访问类属性和类方法
 
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        pass
 
# 直接通过类来访问类属性和类方法
print(Cat.species)
 
# 执行类方法时,无需显式地传递类类型作为参数
Cat.catch_mice()

16.3.4 类的实例化

类是对某一类事物进行抽象,例如在上文中定义了一个Cat类,Cat类就是对猫这种事物进行抽象。对类进行实例化以后,会得到一个具体的对象,例如短尾猫就是猫这种类型的一个具体的对象。同学们要牢记的是:类属性,类方法表示该数据类型共有的属性和方法,为所有对象共享。对类进行实例化的基本语法:
object = ClassName()
ClassName表示类的类型名,object表示对象名。()用来传递在构造函数中定义的参数。构造函数用来构造对象,如果没有在类体中定义构造函数,Python解释器会自动添加一个无参的构造函数。在本节内容中,同学们不需要理解和掌握构造函数,在下节讲解对象属性和对象方法时会再对构造函数进行详细讲解。现在请同学们参照以下步骤,定义一个简单的Cat类:
(1) 在磁盘中创建cat.py
在D盘的Python3-Learning目录下面的chapter16目录中创建cat.py。用PyCharm打开该脚本,并输入以下代码:

# 定义一个Cat类,在类体中定义类方法
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        # cls表示当前的Cat类,通过.来访问类属性和类方法
        print("{} can catch mouse".format(cls.species))
 
 
# 对Cat类进行实例化,kitty即为实例化后的Cat对象
kitty = Cat()
 
# 类属性和类方法为所有对象共享,所以可以通过对象来访问类中的属性和方法
 
# 通过对象来访问类属性
print(kitty.species)
 
# 通过对象来访问类方法
kitty.catch_mice()
(2) 执行cat.py
同学们可以在PyCharm或命令行中执行cat.py。在PyCharm中执行时点击菜单中的run菜单。在命令行中执行cat.py时需要进入windows命令行,然后执行D:切换到D盘。再执行cd命令切换到D:\Python3-Learning\chapter16目录。切换成功以后,在命令行中执行:
python cat.py
脚本执行成功以后,会在命令行中看到程序的输出:
cat can catch mouse

16.3.5 类的静态方法

Python中的静态方法与类方法很相似,在定义静态方法时需要在方法前面加修饰符。类方法需要在方法前面加@classmethod的修饰符,表示当前定义的方法是类方法,而静态方法对应的修饰符是@staticmethod。静态方法与类方法的区别在于,不会将第一个参数自动绑定为类类型。
对于类方法,Python会自动将类方法中的第一个参数绑定为类类型,在调用传参时,无需显式传递

静态方法的语法形式:

@staticmethod
def static_method(*args,  **kwargs):
    pass
类的静态方法与类方法都是类作用域中的全局方法,可以被所有实例化后的对象共享。

代码实例:

# __desc__ = 在类中定义静态方法
 
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        pass
 
    # 定义静态方法时需要在函数前加上一个@staticmethod的修饰符
    @staticmethod
    def pees():
        pass
 
 
# 执行类的静态方法
Cat.pees()
定义静态方法时,可以显式地定义和传递一个类型参数,以模拟类方法:

# __desc__ = 使用静态方法模拟类方法
 
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        pass
 
    # 定义静态方法时需要在函数前加上一个@staticmethod的修饰符
    # 定义一个cls参数,表示当前类型
    @staticmethod
    def pees(cls):
        print(cls.species)
 
 
# 执行类的静态方法,须显式地传递当前类作为参数
Cat.pees(Cat)

1.3.7 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:

关注微信公众号.jpg











欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录