Python 类详解 [OOP][Python 类的定义][Python 创建类对象][Python 类对象的使用]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

1 Python 类的定义

在 Python 中定义类需要实用class关键字,格式如下所示:

class 类名:
	类属性...
	类方法...

对以上格式说明,

  • class:此关键字是必需的。
  • 类名:类名本质上就是一个标识符,因此,在给类起名字时,必须让其符合 Python 标识符命名规则。还要考虑可读性问题,类名最好能体现出该类的功能。如果类名由多个字母或单词组成,每个单词的首字母大写,其它字母小写。
  • ::类名后的冒号是必需的。告诉 Python 解释器,要开始编写类属性和类方法了。
  • 类属性和类方法:都不是必需的,可有可无。请参见《Python 类中的变量(或属性)分类以及特点详解》
  • Python 类中的属性和方法所在的位置是任意的,它们之间并没有固定的前后次序。
  • 同属一个类的所有类属性和类方法,要保持统一的缩进格式。

举例如下所示:

例一,

# 定义类
class Person:
    # 定义类属性
    name = '码农阿杰'
    age = 18
    
    # 定义类方法
    def say(self):
        print('Person 类中的 say() 方法。')

例二,

# 定义空类,没有实际意义
class Demo:
    pass

例一中定义了一个 Person 类,类中有一个实例方法 say(self),其中还有个self参数。
对于实例方法,请参见博文《Python 类中的方法分类以及特点详解》
对于 self参数,请参见博文《Python self 参数详解》

2 Python 创建类的对象和使用

2.1 Python 类对象的创建

创建类对象的过程,又称为类的实例化。

类的实例化,其语法格式如下所示:

类名(参数)

举例如下所示:

# 定义类
class Person:
    # 定义类属性
    name = '码农阿杰'
    age = 18

    # 定义实例方法
    def say(self):
        print('Person 类中的 say() 方法。')


person = Person()  # 类的实例化:创建类的对象

2.2 Python 类对象的使用

(1)类对象访问变量或方法

类对象访问类中实例变量的语法格式如下所示:

类对象名.变量名

类对象调用类中方法的语法格式如下所示:

对象名.方法名(参数)

举例如下所示:

# 定义类
class Person:
    # 定义类属性
    name = '码农阿杰'
    age = 18

    # 定义实例方法
    def say(self):
        print('Person 类中的 say() 方法。')


person = Person()  # 类的实例化:创建类的对象

# 输出 name、age 实例变量的值到控制台
print(person.name)
print(person.age)

# 修改实例变量的值
person.name = '阿杰'
person.age = 28
print('修改后实例变量的值:', person.name, person.age)

# 调用实例方法
person.say()

运行结果:

码农阿杰
18
修改后实例变量的值: 阿杰 28
Person 类中的 say() 方法。

(2)给类对象动态添加、删除变量

举例如下所示:

# 定义类
class Person:
    # 定义类属性
    name = '码农阿杰'
    age = 18

    # 定义实例方法
    def say(self):
        print('Person 类中的 say() 方法。')


person = Person()  # 类的实例化:创建类的对象

# 为类对象动态添加两个实例变量 gender、num
person.gender = '男'
person.num = 1314

# 打印为类对象动态添加的两个实例变量 gender、num 的值
print(person.gender)
print(person.num)

# 使用 del 语句动态删除类对象的实例变量
del person.gender

# 打印进行测试,是否删除成功。如果删除成功,会报错。
print(person.gender)

运行结果:

1314
Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 26, in <module>
    print(person.gender)
AttributeError: 'Person' object has no attribute 'gender'

(3)给类对象动态添加方法

注意:为对象动态增加的方法,Python 不会自动将调用者自动绑定到所添加方法的第一个参数(通常为 self),需要手动绑定。
对于 self 参数,请参见博文《Python self 参数详解》

举例如下所示:

例一,

# 定义类
class Person:
    # 定义类属性
    name = '码农阿杰'
    age = 18

    # 定义实例方法
    def say(self):
        print('Person 类中的 say() 方法。')


person = Person()  # 类的实例化:创建类的对象


# 先准备一个方法
def add(self):
    print('add() 函数。')


# 为 person 对象动态添加 info 方法。把事先准备好的 add(self) 方法赋值给 info。
person.info = add  # 动态绑定方法。也可以使用 lambda 表达式来写,因为事先准备的 add(self) 方法只有一行代码
person.info(person)  # 手动将调用者绑定到所添加方法的第一个参数

运行结果:

add() 函数。

例二,还可以借助 types 模块下的 MethodType 来实现

# 定义类
class Person:
    # 定义类属性
    name = '码农阿杰'
    age = 18

    # 定义实例方法
    def say(self):
        print('Person 类中的 say() 方法。')


person = Person()  # 类的实例化:创建类的对象


# 先准备一个方法
def add(self):
    print('add() 函数。')


# 为 person 对象动态添加 info 方法。把事先准备好的 add(self) 方法赋值给 info。
# person.info = add  # 动态绑定方法
# person.info(person)  # 手动将调用者绑定到所添加方法的第一个参数

# 使用 types 模块下的 MethodType 实现动态绑定方法和手动将调用者绑定到所添加方法的第一个参数
from types import MethodType
person.info = MethodType(add, person)  # 已经将该函数的 self 参数绑定为 person

person.info()  # 调用添加的方法

运行结果:

add() 函数。

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Python 官网

Python 3.8.2 documentation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章