注册 登录
Python基础教程

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

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

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

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

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十六章: Python面向对象 > 16.4节: 对象属性与对象方法

16.4节: 对象属性与对象方法

薯条老师 2022-11-24 14:35:02 3382 0

编辑 收藏

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

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

16.4.1 类的构造函数

在对类进行实例化时,如果没有定义构造函数,那么Python会自动调用一个默认的无参构造函数来进行实例化。对类进行实例化以后,可以返回一个构造好的对象。类构造函数的语法结构:

class ClassName:
    def __init__(self):
        pass

类体中的__init__函数即是构造函数,参数self表示当前对象。同学们需将对象方法与类方法区分开来:类方法是全局的,而对象方法是局部的。不论是self还是cls, 都是一种通用的写法,同学们也可以将其修改为其它的参数名。

对于对象方法,Python会自动地将当前当前对象与self参数进行绑定,无需显式地传递。

在对类进行实例化时,Python会自动执行类的构造函数,我们可以写一段简单的代码进行验证,在构造函数中执行print方法:

# __desc__ = 在构造函数中进行输出

class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "Cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        # cls表示当前的Cat类,通过.来访问类属性和类方法
        print("it is the nature of {} to catch mice".format(cls.species))
 
    # 定义类的构造函数
    def __init__(self):
        print("a cat was born")
 
# 对Cat类进行实例化,kitty即为实例化后的Cat对象
kitty = Cat()
将以上代码写入Python脚本中,然后在PyCharm或命令行中执行起来,会看到以下输出:
a cat was born
这说明在对类进行实例化时,Python自动地调用了构造函数。在类的构造函数中,可以定义任何参数。一旦定义了参数,那么在对类进行实例化时,必须传递参数。参数传递方式同普通的函数一样,可以按位置参数或关键字参数的方式进行传递。

对函数的参数传递方式不是很熟悉的同学,可以复习《Python零基础入门教程》14.2节中的内容。

代码实例:

# __desc__ = 在构造函数中定义参数
 
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "Cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        # cls表示当前的Cat类,通过.来访问类属性和类方法
        print("it is the nature of {} to catch mice".format(cls.species))
 
    def __init__(self,name):
        print("the cat named {} was born".format(name))
 
# 对Cat类进行实例化时必须传递与构造函数一致的参数
# self参数,Python会自动将当前对象进行绑定,无需传递
kitty = Cat("kitty")
 
"""
将代码写入到Python脚本中,然后在PyCharm中执行,会看到下面的输出:
the cat named kitty was born
"""

16.4.2 对象属性

对类进行实例化时,可以得到一个构造好的对象。如果对类进行N次实例化,那么会得到N个对象。在16.3节中讲到了类属性,类属性为所有对象共享,也就是说即便你定义了十个还是一百个对象,它们都共享类属性。类属性是全局的,为所有对象共享,而对象属性是局部的,只作用于当前对象。定义对象属性,需通过self参数进行定义。定义对象属性的基本语法:
self.name = value
self表示当前对象,.是成员操作符,self.name表示为对象定义一个名为name的属性,value表示属性的值。

代码实例:

# __desc__ = 在构造函数中定义对象属性
 
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "Cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        # cls表示当前的Cat类,通过.来访问类属性和类方法
        print("it is the nature of {} to catch mice".format(cls.species))
 
    def __init__(self,name):
        # 定义一个name的属性,然后将参数name进行赋值
        self.name = name
        # 此时访问的是对象属性
        print("the cat named {} was born".format(self.name))
 
# 对Cat类进行实例化时必须传递与构造函数一致的参数
# self参数,Python会自动将当前对象进行绑定,无需传递
kitty = Cat("kitty")
 
"""
将代码写入到Python脚本中,然后在PyCharm中执行,会看到下面的输出:
the cat named kitty was born
"""

16.4.3 对象方法

在16.3节中讲到了类方法,类方法为所有对象共享,也就是说即便你定义了十个还是一百个对象,它们都共享类方法。类方法相当于一个全局方法,而对象方法是局部的,只作用于当前对象。定义对象方法时,需至少定义一个参数,第一个位置形参通常命名为self。定义对象方法的基本语法:

def method(self):
  pass
method表示方法名,self参数表示当前对象。现在同学们参照以下步骤,为Cat类扩展对象属性和对象方法:

(1) 在磁盘中编辑cat.py
用PyCharm打开D:\Python3-Learning\chapter16目录下的cat.py。并输入以下代码:

代码实例:

# __desc__ = 在构造函数中定义参数
 
class Cat:
    # 定义类属性species,来表示猫所属的物种
    species = "Cat" 
 
    # 定义类方法时需要在函数前加上一个@classmethod的修饰符
    # 函数至少定义一个参数,参数名通常为cls
    @classmethod
    def catch_mice(cls):
        # cls表示当前的Cat类,通过.来访问类属性和类方法
        print("it is the nature of {} to catch mice".format(cls.species))
 
    def __init__(self,name):
        # 定义一个name的对象属性,然后将参数name赋值给name属性
        self.name = name
 

    # 定义一个名为miaow的对象方法
    def miaow(self):
        # 可以通过self参数来访问和定义对象属性
        # 也可以通过self参数来访问对象方法
        # 因为self表示的是当前对象
        print("the cat named {} miaow when unhappy".format(self.name))
 
 
# 对Cat类进行实例化时必须传递与构造函数一致的参数
# self参数,Python会自动将当前对象进行绑定,无需显式传递
kitty = Cat("kitty")
 
# 调用对象方法miaow, Python会自动将对象与self参数进行绑定,无需显式传递
kitty.miaow()
(2) 执行cat.py
可以直接在PyCharm中执行dog.py,点击run菜单下面的run子菜单。也可以进入命令行,切换到D:\Python3-Learning\chapter16,然后执行python cat.py。脚本程序运行成功以后,会看到下面的输出:
the cat named kitty miaow when unhappy

16.4.5 最具实力的小班培训

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

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

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

关注微信公众号.jpg












欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录