Python类对象的创建以及使用
Python中,使用class语句只能创建一个类,不能创建类的对象,创建类的对象需要实例化。
对类的实例化格式如下:
类名(参数...)
在创建类时,如没有创建_init_()构造方法或_init_()构造方法只有一个self参数时,则实例化类对象时可以不传入参数。
创建一个名为book的类,并对其实例化
代码示例
class book:
# 定义了两个类变量
title = "书名1"
author = "作者1"
def __init__(self, title, author):
# 定义了两个实例变量
self.title = title
self.author = author
print("书名为:", title, "作者:", author)
# 实例方法
def pricing(self, price):
print("该书价格为", price)
test = book("平凡的世界", "路遥")
运行输出如下
上面代码中,构造方法除了self参数还有两个参数,所以实例化时需要传入相应的参数值,self参数时特殊参数,不需要手动传值,Python会给它传值,而且self参数需要作为第一个参数。
类对象的使用
实例化对象后就可以对对象进行操作了,如操作对象的实例变量(访问、修改变量值等),调用对象的方法。
类对象访问实例变量语法格式
对象名.变量名
类对象调用方法语法格式
对象名.方法名(参数)
在上面的代码基础上再添加如下代码
# 打印出test的title和author实例变量
print(test.title, test.author)
# 调用test的princing方法
test.pricing(56)
# 为实例变量赋值
test.title = "人生"
print(test.title, test.author)
运行结果如下
Python支持给类对象动态添加变量,只需要为新变量赋值。
代码如下
test.newVar = ['书名2', "作者2"]
print(test.newVar)
运行结果
上面代码为test对象动态增加了一个newVar变量,也就是对test对象的newVar实例变量赋值就是新增变量,也可以动态删除变量。
使用del语句删除变量
print(test.newVar)
del test.newVar
print(test.newVar)
运行会报错,
同样也可以为对象动态添加方法
def void_1(self):
print("void_1", self)
# 使用void_1对test的void_2方法赋值,也就是动态绑定方法
test.void_2 = void_1
# 需要手动将调用者绑定到第一个参数
test.void_2(test)
# 使用lambda表达式为对象动态绑定方法
test.ld = lambda self: print("lambda", self)
test.ld(test)
注:为对象动态添加方法时,Python不会将调用者自动绑定到第一个参数,需要手动将调用者绑定第一个参数(Python要求 不管是类中的构造方法还是实例方法子至少包含一个参数,虽然没有指定该参数的名称,也就是可以是任意参数名,但为了规范以及更好的阅读性,一般命名为self)
运行结果
使用types模块下的MethodType进行包装,从而时动态添加的方法自动绑定到第一个参数。
代码示例
# 定义函数
def test_1(self, text):
print("text:", text)
# 导入Method
from types import MethodType
# 使用MethodType对test_1包装,并绑定第一个参数为test
test.void_3 = MethodType(test_1, test)
test.void_3("context")
运行结果
通过MethodType包装test_1函数时,指定第一个参数为test,包装后,为test对象动态增加的void_3方法的第一个参数已绑定,所以通过test调用void_3方法时不需要传入第一个参数。