详解type类的定义和调用,通俗易懂入门版

使用type动态定义类,
内置type()函数在传递了一个参数时将返回一个对象的类型。对于新式类,通常与对象的class属性相
同:
type(name, bases, dict)调用type(),type传参的规则如下:
name:指定类名称,将成为该类的name属性。
bases:指定继承类的基类元组,将成为该类的bases属性。
dict:指定包含类主体定义的名称空间字典,将成为该类的dict属性。

在你提供的代码中,通过 type() 动态创建了 User 类,并且为其定义了 move 方法。为了能够通过 user_instance.move() 调用 move 方法,关键在于这个方法是作为 User 类的一个成员方法存在的。由于 type() 生成的类会将 move 方法放入类的 __dict__ 属性中,move 方法会成为 User 类的一个成员函数,而你通过 user_instance 创建的实例就可以访问它。
让我们逐步分析代码:
def move(self):
    print('---move----方法')

# 使用 type 动态创建一个 User 类
User = type('User', (), {'name': '小明', 'move': move})  # 这个字典里面的第二个参数,key用的move,value用的是一个move函数,加括号()可以实例化执行。

# 创建 User 类的实例
user_instance = User()

# 访问属性和方法
print(user_instance.name)  # 输出:小明
user_instance.move()  # 输出:---move----方法

关键解释:

1.def move(self):
这里定义了一个方法 move,它接收 self 作为参数,并打印出一条信息 '---move----方法'。
2.User = type('User', (), {'name': '小明', 'move': move})
这一行使用 type() 动态创建了一个新的类 User。 
 
type(name, bases, dict)调用type(),type传参的规则如下:
name:指定类名称,将成为该类的name属性。
bases:指定继承类的基类元组,将成为该类的bases属性。
dict:指定包含类主体定义的名称空间字典,将成为该类的dict属性。

3.'User' 是类名,即 User.__name__ = 'User'。
4.() 为空元组,表示该类没有父类,默认继承自 object。
5.{'name': '小明', 'move': move} 是一个字典,包含类的属性和方法:
6.name 属性被赋值为 '小明'。
7.move 方法被赋值为上面定义的 move 函数。


8.user_instance = User()
通过 User() 创建了 User 类的实例 user_instance。此时,user_instance 继承了 User 类的属性和方法。


9.user_instance.name 将返回 '小明',因为 name 是类的一个属性。
10.user_instance.move() 调用的是 move 方法,输出 ---move----方法。

为什么可以调用 move() 方法?
当你通过 type() 创建 User 类时,move 方法被作为类的一个成员方法放入了类的 __dict__ 中。因此,User 类的实例(如 user_instance)可以访问该方法。
在实例化时,Python 会查找 user_instance 的类,发现它是 User 类的实例。由于 User 类的 __dict__ 包含了 move 方法,Python 会将该方法绑定到 user_instance 上(通过 self 参数),使得可以通过 user_instance.move() 调用。
这与普通的类定义类似,只是这里我们使用了 type() 来动态生成类和方法。
小结:
通过 type() 创建类时,方法 move 被添加到类的字典(__dict__)中。类的实例 user_instance 继承了这个方法,因此可以通过 user_instance.move() 调用该方法。



posted @ 2025-09-05 09:43  大海一个人听  阅读(18)  评论(0)    收藏  举报