diff --git a/11 概念认知/函数/5 常见风格.py b/11 概念认知/函数/3 常见风格.py similarity index 100% rename from 11 概念认知/函数/5 常见风格.py rename to 11 概念认知/函数/3 常见风格.py diff --git a/12 语言特性/1 递归.py b/11 概念认知/函数/4 递归.py similarity index 100% rename from 12 语言特性/1 递归.py rename to 11 概念认知/函数/4 递归.py diff --git a/11 概念认知/流式调用/3 方法bind.py b/11 概念认知/流式调用/2 方法bind.py similarity index 100% rename from 11 概念认知/流式调用/3 方法bind.py rename to 11 概念认知/流式调用/2 方法bind.py diff --git a/11 概念认知/流式调用/4 重载管道.py b/11 概念认知/流式调用/3 重载管道.py similarity index 100% rename from 11 概念认知/流式调用/4 重载管道.py rename to 11 概念认知/流式调用/3 重载管道.py diff --git a/11 概念认知/流式调用/4 类方法.py b/11 概念认知/流式调用/4 类方法.py new file mode 100644 index 0000000..f124fb2 --- /dev/null +++ b/11 概念认知/流式调用/4 类方法.py @@ -0,0 +1,29 @@ +from cppy.cp_util import * + +class Flow: + def extract_file_words(self, filepath): + self.data = extract_file_words(filepath) + return self + + def get_frequencies(self): + self.data = get_frequencies(self.data) + return self + + def sort_dict(self): + self.data = sort_dict(self.data) + return self + + def print_word_freqs(self, n): + print_word_freqs(self.data, n) + return self + + +# 顺序调用 +Flow().extract_file_words(testfilepath).get_frequencies().sort_dict().print_word_freqs(10) + +''' +连续方法调用,看起来比较舒服 +但是需要假设: + - 每一个类方法返回 self :否则,没法连续 + - 类方法默认不写第一个参数,数据都在 .data 里面 +''' \ No newline at end of file diff --git a/11 概念认知/流式调用/5 类方法.py b/11 概念认知/流式调用/5 类方法.py index f124fb2..4de00c1 100644 --- a/11 概念认知/流式调用/5 类方法.py +++ b/11 概念认知/流式调用/5 类方法.py @@ -1,29 +1,50 @@ from cppy.cp_util import * -class Flow: - def extract_file_words(self, filepath): - self.data = extract_file_words(filepath) - return self +# 装饰器改写类 +# - 找到以f_开头的方法 +# - 将方法函数的返回值赋值给对象的data属性 +# - 返回对象自身 +def return_self_decorator(cls): + def return_self(func): + # 定义一个闭包函数,用于接收参数 + def wrapper(self, *args, **kwargs): + self.data = func(self, *args, **kwargs) + return self # 返回类自身 + return wrapper - def get_frequencies(self): - self.data = get_frequencies(self.data) - return self + for name, method in cls.__dict__.items(): + # 判断属性是否可调用,且属性名以f_开头 + if callable(method) and name.startswith('f_'): + # 为类改写属性,将封装后的函数赋值 + setattr(cls, name, return_self(method)) + return cls + +@return_self_decorator +class Flow(): + def test(self): + return 'test' + + def f_extract_file_words(self, filepath): + return extract_file_words(filepath) - def sort_dict(self): - self.data = sort_dict(self.data) - return self + def f_get_frequencies(self): + return get_frequencies(self.data) + + def f_sort_dict(self): + return sort_dict(self.data) - def print_word_freqs(self, n): - print_word_freqs(self.data, n) - return self + def f_print_word_freqs(self, n): + print_word_freqs(self.data, n) # 顺序调用 -Flow().extract_file_words(testfilepath).get_frequencies().sort_dict().print_word_freqs(10) +Flow().f_extract_file_words(testfilepath).f_get_frequencies().f_sort_dict().f_print_word_freqs(10) ''' -连续方法调用,看起来比较舒服 -但是需要假设: - - 每一个类方法返回 self :否则,没法连续 +改写后,参与 function flow 功能的方法 + - 需要以 'f_' 开头 - 类方法默认不写第一个参数,数据都在 .data 里面 + +仍旧需要特殊的方法写法 +所以,还是 1,2种方法比较自然 ''' \ No newline at end of file diff --git a/11 概念认知/流式调用/6 类方法.py b/11 概念认知/流式调用/6 类方法.py deleted file mode 100644 index 4de00c1..0000000 --- a/11 概念认知/流式调用/6 类方法.py +++ /dev/null @@ -1,50 +0,0 @@ -from cppy.cp_util import * - -# 装饰器改写类 -# - 找到以f_开头的方法 -# - 将方法函数的返回值赋值给对象的data属性 -# - 返回对象自身 -def return_self_decorator(cls): - def return_self(func): - # 定义一个闭包函数,用于接收参数 - def wrapper(self, *args, **kwargs): - self.data = func(self, *args, **kwargs) - return self # 返回类自身 - return wrapper - - for name, method in cls.__dict__.items(): - # 判断属性是否可调用,且属性名以f_开头 - if callable(method) and name.startswith('f_'): - # 为类改写属性,将封装后的函数赋值 - setattr(cls, name, return_self(method)) - return cls - -@return_self_decorator -class Flow(): - def test(self): - return 'test' - - def f_extract_file_words(self, filepath): - return extract_file_words(filepath) - - def f_get_frequencies(self): - return get_frequencies(self.data) - - def f_sort_dict(self): - return sort_dict(self.data) - - def f_print_word_freqs(self, n): - print_word_freqs(self.data, n) - - -# 顺序调用 -Flow().f_extract_file_words(testfilepath).f_get_frequencies().f_sort_dict().f_print_word_freqs(10) - -''' -改写后,参与 function flow 功能的方法 - - 需要以 'f_' 开头 - - 类方法默认不写第一个参数,数据都在 .data 里面 - -仍旧需要特殊的方法写法 -所以,还是 1,2种方法比较自然 -''' \ No newline at end of file diff --git a/12 语言特性/1 类生成器/元类.py b/12 语言特性/1 类生成器/元类.py new file mode 100644 index 0000000..53c9dc1 --- /dev/null +++ b/12 语言特性/1 类生成器/元类.py @@ -0,0 +1,26 @@ +from cppy.cp_util import * +from collections import Counter + +# 定义一个带计数器的元类 +class CounterMetaclass(type): + def __new__(mcs, name, bases, attrs): + attrs['_counter'] = Counter() + return super().__new__(mcs, name, bases, attrs) + +# 基于元类创建类 +class Word( metaclass=CounterMetaclass ): + def __init__(self, word): + self.word = word + self._counter[self.word] += 1 + + @classmethod + def get_word_freqs(cls,n) -> Counter: + return cls._counter.most_common(n) + + +for word in extract_file_words ( testfilepath ) : Word(word) +print_word_freqs(Word.get_word_freqs(10)) + +''' +常用于将依赖项(如服务或配置)自动注入到类中。 +''' \ No newline at end of file diff --git a/12 语言特性/3 生成器.py b/12 语言特性/2 暂停执行/1 生成器.py similarity index 100% rename from 12 语言特性/3 生成器.py rename to 12 语言特性/2 暂停执行/1 生成器.py diff --git a/12 语言特性/4 异步.py b/12 语言特性/2 暂停执行/2 异步.py similarity index 100% rename from 12 语言特性/4 异步.py rename to 12 语言特性/2 暂停执行/2 异步.py diff --git a/12 语言特性/5 内省.py b/12 语言特性/3 运行期符号表/1 内省/1 内省.py similarity index 100% rename from 12 语言特性/5 内省.py rename to 12 语言特性/3 运行期符号表/1 内省/1 内省.py diff --git a/12 语言特性/2 装饰/1 反射装饰.py b/12 语言特性/3 运行期符号表/2 装饰/1 反射装饰.py similarity index 100% rename from 12 语言特性/2 装饰/1 反射装饰.py rename to 12 语言特性/3 运行期符号表/2 装饰/1 反射装饰.py diff --git a/12 语言特性/2 装饰/2 装饰器.py b/12 语言特性/3 运行期符号表/2 装饰/2 装饰器.py similarity index 100% rename from 12 语言特性/2 装饰/2 装饰器.py rename to 12 语言特性/3 运行期符号表/2 装饰/2 装饰器.py diff --git a/12 语言特性/2 装饰/3 参数类型检查.py b/12 语言特性/3 运行期符号表/2 装饰/3 参数类型检查.py similarity index 100% rename from 12 语言特性/2 装饰/3 参数类型检查.py rename to 12 语言特性/3 运行期符号表/2 装饰/3 参数类型检查.py diff --git a/12 语言特性/6 反射/反射_函数.py b/12 语言特性/3 运行期符号表/3 反射/反射_函数.py similarity index 100% rename from 12 语言特性/6 反射/反射_函数.py rename to 12 语言特性/3 运行期符号表/3 反射/反射_函数.py diff --git a/12 语言特性/6 反射/反射_类.py b/12 语言特性/3 运行期符号表/3 反射/反射_类.py similarity index 100% rename from 12 语言特性/6 反射/反射_类.py rename to 12 语言特性/3 运行期符号表/3 反射/反射_类.py diff --git a/16 其它/1 复用/函数调用复用.py b/15 工程化/1 复用/函数调用复用.py similarity index 100% rename from 16 其它/1 复用/函数调用复用.py rename to 15 工程化/1 复用/函数调用复用.py diff --git a/16 其它/1 复用/对象复用.py b/15 工程化/1 复用/对象复用.py similarity index 100% rename from 16 其它/1 复用/对象复用.py rename to 15 工程化/1 复用/对象复用.py diff --git a/15 工程化/1 松耦合/1 观察者/1 观察者.py b/15 工程化/2 松耦合/1 观察者/1 观察者.py similarity index 100% rename from 15 工程化/1 松耦合/1 观察者/1 观察者.py rename to 15 工程化/2 松耦合/1 观察者/1 观察者.py diff --git a/15 工程化/1 松耦合/1 观察者/2 观察者.py b/15 工程化/2 松耦合/1 观察者/2 观察者.py similarity index 100% rename from 15 工程化/1 松耦合/1 观察者/2 观察者.py rename to 15 工程化/2 松耦合/1 观察者/2 观察者.py diff --git a/15 工程化/1 松耦合/1 观察者/3 注册回调.py b/15 工程化/2 松耦合/1 观察者/3 注册回调.py similarity index 100% rename from 15 工程化/1 松耦合/1 观察者/3 注册回调.py rename to 15 工程化/2 松耦合/1 观察者/3 注册回调.py diff --git a/15 工程化/1 松耦合/1 观察者/4 订阅发布.py b/15 工程化/2 松耦合/1 观察者/4 订阅发布.py similarity index 100% rename from 15 工程化/1 松耦合/1 观察者/4 订阅发布.py rename to 15 工程化/2 松耦合/1 观察者/4 订阅发布.py diff --git a/15 工程化/1 松耦合/1 观察者/readme.MD b/15 工程化/2 松耦合/1 观察者/readme.MD similarity index 100% rename from 15 工程化/1 松耦合/1 观察者/readme.MD rename to 15 工程化/2 松耦合/1 观察者/readme.MD diff --git a/15 工程化/1 松耦合/2 消息链/1 只有消息接口.py b/15 工程化/2 松耦合/2 消息链/1 只有消息接口.py similarity index 100% rename from 15 工程化/1 松耦合/2 消息链/1 只有消息接口.py rename to 15 工程化/2 松耦合/2 消息链/1 只有消息接口.py diff --git a/15 工程化/1 松耦合/2 消息链/2 调用链.py b/15 工程化/2 松耦合/2 消息链/2 调用链.py similarity index 100% rename from 15 工程化/1 松耦合/2 消息链/2 调用链.py rename to 15 工程化/2 松耦合/2 消息链/2 调用链.py diff --git a/15 工程化/1 松耦合/2 消息链/3 消息链.py b/15 工程化/2 松耦合/2 消息链/3 消息链.py similarity index 100% rename from 15 工程化/1 松耦合/2 消息链/3 消息链.py rename to 15 工程化/2 松耦合/2 消息链/3 消息链.py diff --git a/15 工程化/1 松耦合/2 消息链/4 消息队列.py b/15 工程化/2 松耦合/2 消息链/4 消息队列.py similarity index 100% rename from 15 工程化/1 松耦合/2 消息链/4 消息队列.py rename to 15 工程化/2 松耦合/2 消息链/4 消息队列.py diff --git a/15 工程化/1 松耦合/3 微服务/client_app.py b/15 工程化/2 松耦合/3 微服务/client_app.py similarity index 100% rename from 15 工程化/1 松耦合/3 微服务/client_app.py rename to 15 工程化/2 松耦合/3 微服务/client_app.py diff --git a/15 工程化/1 松耦合/3 微服务/counter_service.py b/15 工程化/2 松耦合/3 微服务/counter_service.py similarity index 100% rename from 15 工程化/1 松耦合/3 微服务/counter_service.py rename to 15 工程化/2 松耦合/3 微服务/counter_service.py diff --git a/15 工程化/1 松耦合/3 微服务/sorter_service.py b/15 工程化/2 松耦合/3 微服务/sorter_service.py similarity index 100% rename from 15 工程化/1 松耦合/3 微服务/sorter_service.py rename to 15 工程化/2 松耦合/3 微服务/sorter_service.py diff --git a/15 工程化/1 松耦合/3 微服务/tokenizer_service.py b/15 工程化/2 松耦合/3 微服务/tokenizer_service.py similarity index 100% rename from 15 工程化/1 松耦合/3 微服务/tokenizer_service.py rename to 15 工程化/2 松耦合/3 微服务/tokenizer_service.py diff --git a/15 工程化/1 松耦合/4 插件/config.ini b/15 工程化/2 松耦合/4 插件/config.ini similarity index 100% rename from 15 工程化/1 松耦合/4 插件/config.ini rename to 15 工程化/2 松耦合/4 插件/config.ini diff --git a/15 工程化/1 松耦合/4 插件/plugin.py b/15 工程化/2 松耦合/4 插件/plugin.py similarity index 100% rename from 15 工程化/1 松耦合/4 插件/plugin.py rename to 15 工程化/2 松耦合/4 插件/plugin.py diff --git a/15 工程化/1 松耦合/4 插件/plugins-src/buildingPyc.py b/15 工程化/2 松耦合/4 插件/plugins-src/buildingPyc.py similarity index 100% rename from 15 工程化/1 松耦合/4 插件/plugins-src/buildingPyc.py rename to 15 工程化/2 松耦合/4 插件/plugins-src/buildingPyc.py diff --git a/15 工程化/1 松耦合/4 插件/plugins-src/f1.py b/15 工程化/2 松耦合/4 插件/plugins-src/f1.py similarity index 100% rename from 15 工程化/1 松耦合/4 插件/plugins-src/f1.py rename to 15 工程化/2 松耦合/4 插件/plugins-src/f1.py diff --git a/15 工程化/1 松耦合/4 插件/plugins-src/f2.py b/15 工程化/2 松耦合/4 插件/plugins-src/f2.py similarity index 100% rename from 15 工程化/1 松耦合/4 插件/plugins-src/f2.py rename to 15 工程化/2 松耦合/4 插件/plugins-src/f2.py diff --git a/15 工程化/1 松耦合/4 插件/plugins/f1.pyc b/15 工程化/2 松耦合/4 插件/plugins/f1.pyc similarity index 100% rename from 15 工程化/1 松耦合/4 插件/plugins/f1.pyc rename to 15 工程化/2 松耦合/4 插件/plugins/f1.pyc diff --git a/15 工程化/1 松耦合/4 插件/plugins/f2.pyc b/15 工程化/2 松耦合/4 插件/plugins/f2.pyc similarity index 100% rename from 15 工程化/1 松耦合/4 插件/plugins/f2.pyc rename to 15 工程化/2 松耦合/4 插件/plugins/f2.pyc diff --git a/15 工程化/2 对象接口/tf-14A.py b/15 工程化/4 对象接口/tf-14A.py similarity index 100% rename from 15 工程化/2 对象接口/tf-14A.py rename to 15 工程化/4 对象接口/tf-14A.py diff --git a/15 工程化/2 对象接口/tf-14B.py b/15 工程化/4 对象接口/tf-14B.py similarity index 100% rename from 15 工程化/2 对象接口/tf-14B.py rename to 15 工程化/4 对象接口/tf-14B.py diff --git a/15 工程化/4 类属性 .py b/15 工程化/5 对象属性 .py similarity index 100% rename from 15 工程化/4 类属性 .py rename to 15 工程化/5 对象属性 .py