注册 登录
Python面向对象
首页 > Python面向对象 > 1.4节:对象属性与对象方法

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

薯条老师 2020-05-27 08:16:55 185914 0

编辑 收藏

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

薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

1.4.1 类的构造函数

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

类构造函数的语法结构:

class ClassName:
    def __init__(self):
        pass
类体中的__init__函数就是构造函数,参数self表示当前对象。同学们要与类方法区别开来,在类方法中参数为cls, cls表示的是当前的类。不论是self还是cls,都是一种通用的写法,也可以修改成其它的参数名称。Python会自动地将当前类型或当前对象与参数进行绑定,无需显式地传递。

在对类进行实例化时,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
"""

1.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
"""

1.4.3 对象方法

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

定义对象方法的基本语法:

def method(self):
  pass
method表示方法名,self参数表示当前对象,在对象方法中至少要定义一个参数,Python会自动将第一个参数与当前对象进行绑定。现在同学们参照以下步骤,一步步地进行本节课程的实战练习:

(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

1.4.4 知识要点

(1) 对类进行实例化时,如果没有定义构造函数,那么Python会自动调用一个默认的无参构造函数来进行实例化
(2) 类体中的__init__函数就是构造函数,参数self表示当前对象。不论是self还是cls,都是一种通用的写法,也可以修改成其它的参数名称。Python会自动地将当前类型或当前对象与参数进行绑定,无需显式地传递。

1.4.5 最具实力的小班培训

来这里参加Python和Java小班培训的学员大部分都找到了很好的工作,平均月薪有11K,学得好的同学,拿到的会更高。由于是小班教学,所以薯条老师有精力把每位学员都教好。打算参加线下小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

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

扫码免费领取学习资料:

关注微信公众号.jpg












欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录