博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.类的两种创建方式(通过元类创建类)
阅读量:5242 次
发布时间:2019-06-14

本文共 1372 字,大约阅读时间需要 4 分钟。

首先我们需要明确一点:python中,一切皆对象

class Student:

  pass

zhangsan = Student()

对象有什么特点:

1.可以被引用

a = zhangsan

2.可以当作函数参数输入

func(zhangsan)

3.可以当作函数的返回值

def func():

  return zhangsan

4.都可以当做容器的元素

lis = ["hello, world", 1, zhangsan]

而我们定义的类也都使用这些特点,我们把上述中的zhangsan换成Student也是可以的,由此得出结论:

类也是对象!!!

类既然是对象那么它一定是有某个类实例化得到的,这个类就是元类

a = 5

print(type(a))

得到a是int类型

print(type(type(a)))

得到type类型,即int的类是type类,这个type就是我们要找的元类!

类的类是元类,type类

 现在我们知道类也是通过元类实例化得到的,那么以后我们自己是不是也可以通过元类创建类呢?

当然可以

方法一:直接创建类

class People:    country = "China"    def __init__(self, name, age):        self.name = name        self.age = age    def tell_info(self):        print(f"{self.name} is from {self.country}, and he is {self.age} years old")chen = People("chenjun", 21)chen.tell_info()

方法二:通过元类创建类

首先,我们需要构成类的三要素,作为元类的参数

参数1:类名,如上面的People

参数2:类的基类(父类),python3中,如果没指定继承的类,则默认继承object类

参数3:名称空间

那么定义代码如下:

class_name = "People"class_bases = (object,)class_dic = {}class_body = """country = "China"def __init__(self, name, age):    self.name = name    self.age = agedef tell_info(self):    print(f"{self.name} is from {self.country}, and he is {self.age} years old")"""exec(class_body, globals(), class_dic)People = type(class_name, class_bases, class_dic)chen = People("chenjun", 21)chen.tell_info()

 输出:

chenjun is from China, and he is 21 years old***Repl Closed***

 

转载于:https://www.cnblogs.com/tarantino/p/8955072.html

你可能感兴趣的文章
283. Move Zeroes把零放在最后面
查看>>
我的函数说明风格
查看>>
ssh 简介
查看>>
26.无向网邻接表类
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
洛谷 p1352 没有上司的舞会 题解
查看>>
Python 数据类型
查看>>
Task 与 Activity
查看>>
Google Guava学习笔记——简介
查看>>
历时八年,HTML5 标准终于完工了
查看>>
Java 字符串转为字符串数组
查看>>
C# 未能加载文件或程序集“xxx”或它的某一个依赖项。参数错误。(异常来自 HRESULT:0x80070057 (E_INVALIDARG))...
查看>>
Tornado demo3 - tcpecho分析
查看>>
一文看懂显示关键材料之彩色滤光片(Color Filter)
查看>>
怎样提高WebService的性能
查看>>
自家人不认识自家人——考你一道有趣的Javascript小题目
查看>>
Go语言学习---数组和切片(Slice)
查看>>
17.树的子结构
查看>>
D - Mike and strings
查看>>
[JS Compse] 4. A collection of Either examples compared to imperative code
查看>>