• 关于 __METHOD__ 的搜索结果

问题

求教php扩展中实例化对象并调用方法

落地花开啦 2019-12-01 19:58:46 1054 浏览量 回答数 1

回答

Python程序员不去依赖语言特性去封装数据,而是通过遵循一定的属性和方法命名规约来达到这个效果。 第一个约定是任何以单下划线_开头的名字都应该是内部实现。比如: class A: def __init__(self): self._internal = 0 # An internal attribute self.public = 1 # A public attribute def public_method(self): ''' A public method ''' pass def _internal_method(self): pass Python并不会真的阻止别人访问内部名称。但是如果你这么做肯定是不好的,可能会导致脆弱的代码。 同时还要注意到,使用下划线开头的约定同样适用于模块名和模块级别函数。 例如,如果你看到某个模块名以单下划线开头(比如_socket),那它就是内部实现。 类似的,模块级别函数比如 sys._getframe() 在使用的时候就得加倍小心了。 你还可能会遇到在类定义中使用两个下划线(__)开头的命名。比如: class B: def __init__(self): self.__private = 0 def __private_method(self): pass def public_method(self): pass self.__private_method() 使用双下划线开始会导致访问名称变成其他形式。 比如,在前面的类B中,私有属性会被分别重命名为 _B__private 和 _B__private_method 。 这时候你可能会问这样重命名的目的是什么,答案就是继承——这种属性通过继承是无法被覆盖的。比如: class C(B): def __init__(self): super().__init__() self.__private = 1 # Does not override B.__private # Does not override B.__private_method() def __private_method(self): pass 这里,私有名称 __private 和 __private_method 被重命名为 _C__private 和 _C__private_method ,这个跟父类B中的名称是完全不同的。

哦哦喔 2020-04-17 15:01:51 0 浏览量 回答数 0

问题

人工智能——nlp自学习平台如何python调用api?

游客kxcy7fja2m6nu 2019-12-01 19:43:52 256 浏览量 回答数 1

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

回答

对象:OC中的对象指向的是一个objc_object指针类型,typedef struct objc_object *id;从它的结构体中可以看出,它包括一个isa指针,指向的是这个对象的类对象,一个对象实例就是通过这个isa找到它自己的Class,而这个Class中存储的就是这个实例的方法列表、属性列表、成员变量列表等相关信息的。 /// Represents an instance of a class. struct objc_object { Class _Nonnull isa OBJC_ISA_AVAILABILITY; }; 类:在OC中的类是用Class来表示的,实际上它指向的是一个objc_class的指针类型,typedef struct objc_class *Class;对应的结构体如下: struct objc_class { Class _Nonnull isa OBJC_ISA_AVAILABILITY; #if !__OBJC2__ Class _Nullable super_class OBJC2_UNAVAILABLE; const char * _Nonnull name OBJC2_UNAVAILABLE; long version OBJC2_UNAVAILABLE; long info OBJC2_UNAVAILABLE; long instance_size OBJC2_UNAVAILABLE; struct objc_ivar_list * _Nullable ivars OBJC2_UNAVAILABLE; struct objc_method_list * _Nullable * _Nullable methodLists OBJC2_UNAVAILABLE; struct objc_cache * _Nonnull cache OBJC2_UNAVAILABLE; struct objc_protocol_list * _Nullable protocols OBJC2_UNAVAILABLE; #endif } 从结构体中定义的变量可知,OC的Class类型包括如下数据(即:元数据metadata):super_class(父类类对象);name(类对象的名称);version、info(版本和相关信息);instance_size(实例内存大小);ivars(实例变量列表);methodLists(方法列表);cache(缓存);protocols(实现的协议列表); 当然也包括一个isa指针,这说明Class也是一个对象类型,所以我们称之为类对象,这里的isa指向的是元类对象(metaclass),元类中保存了创建类对象(Class)的类方法的全部信息。 以下图中可以清楚的了解到OC对象、类、元类之间的关系 从图中可知,最终的基类(NSObject)的元类对象isa指向的是自己本身,从而形成一个闭环。 元类(Meta Class):是一个类对象的类,即:Class的类,这里保存了类方法等相关信息。 我们再看一下类对象中存储的方法、属性、成员变量等信息的结构体 objc_ivar_list:存储了类的成员变量,可以通过object_getIvar或class_copyIvarList获取;另外这两个方法是用来获取类的属性列表的class_getProperty和class_copyPropertyList,属性和成员变量是有区别的。 struct objc_ivar { char * _Nullable ivar_name OBJC2_UNAVAILABLE; char * _Nullable ivar_type OBJC2_UNAVAILABLE; int ivar_offset OBJC2_UNAVAILABLE; #ifdef __LP64__ int space OBJC2_UNAVAILABLE; #endif } OBJC2_UNAVAILABLE; struct objc_ivar_list { int ivar_count OBJC2_UNAVAILABLE; #ifdef __LP64__ int space OBJC2_UNAVAILABLE; #endif /* variable length structure */ struct objc_ivar ivar_list[1] OBJC2_UNAVAILABLE; } objc_method_list:存储了类的方法列表,可以通过class_copyMethodList获取。 结构体如下: struct objc_method { SEL _Nonnull method_name OBJC2_UNAVAILABLE; char * _Nullable method_types OBJC2_UNAVAILABLE; IMP _Nonnull method_imp OBJC2_UNAVAILABLE; } OBJC2_UNAVAILABLE; struct objc_method_list { struct objc_method_list * _Nullable obsolete OBJC2_UNAVAILABLE; int method_count OBJC2_UNAVAILABLE; #ifdef __LP64__ int space OBJC2_UNAVAILABLE; #endif /* variable length structure */ struct objc_method method_list[1] OBJC2_UNAVAILABLE; } objc_protocol_list:储存了类的协议列表,可以通过class_copyProtocolList获取。 结构体如下: struct objc_protocol_list { struct objc_protocol_list * _Nullable next; long count; __unsafe_unretained Protocol * _Nullable list[1]; };

游客bnlxddh3fwntw 2020-04-13 15:03:38 0 浏览量 回答数 0

回答

一个上下文管理器的类,最起码要定义__enter__和__exit__方法。 让我们来构造我们自己的开启文件的上下文管理器,并学习下基础知识。 class File(object): def __init__(self, file_name, method): self.file_obj = open(file_name, method) def __enter__(self): return self.file_obj def __exit__(self, type, value, traceback): self.file_obj.close() 通过定义__enter__和__exit__方法,我们可以在with语句里使用它。我们来试试: with File('demo.txt', 'w') as opened_file: opened_file.write('Hola!') 我们的__exit__函数接受三个参数。这些参数对于每个上下文管理器类中的__exit__方法都是必须的。我们来谈谈在底层都发生了什么。 with语句先暂存了File类的__exit__方法然后它调用File类的__enter__方法__enter__方法打开文件并返回给with语句打开的文件句柄被传递给opened_file参数我们使用.write()来写文件with语句调用之前暂存的__exit__方法__exit__方法关闭了文件

montos 2020-04-16 21:44:28 0 浏览量 回答数 0

问题

taobao.trades.sold.get调用返回数据问题

疯狂的阿伦 2019-12-01 20:16:05 2002 浏览量 回答数 0

问题

MYSQL PROCEDURE 问题 急救 SOS 谢谢 ?报错

爱吃鱼的程序员 2020-06-12 15:34:45 0 浏览量 回答数 1

回答

详细解答可以参考官方帮助文档可以通过生成签名URL的形式提供给用户一个临时的访问URL。在生成URL时,可以指定URL过期的时间,从而限制用户长时间访问。 生成签名url通过oss_gen_signed_url接口生成请求url签名。 生成下载请求的url签名aos_pool_t *p;oss_request_options_t *options;aos_http_request_t *req;char *url_str;char *bucket_name = "<您的bucket名字>";char *object_name = "<您的object名字>";aos_string_t bucket;aos_string_t object;apr_time_t now;int64_t expire_time; int one_hour = 3600; /* 单位:秒*/aos_pool_create(&p, NULL);/* 创建并初始化options */options = oss_request_options_create(p);init_options(options);/* 初始化参数 */aos_str_set(&bucket, bucket_name);aos_str_set(&object, object_name);req = aos_http_request_create(p);req->method = HTTP_GET;now = apr_time_now(); //millisecondexpire_time = now / 1000000 + one_hour;/* 生成签名url */url_str = oss_gen_signed_url(options, &bucket, &object, expire_time, req);printf("临时下载url:%s\n", url_str);aos_pool_destroy(p); 生成上传文件请求的url签名:aos_pool_t *p;oss_request_options_t *options;aos_http_request_t *req;char *bucket_name = "<您的bucket名字>";char *object_name = "<您的object名字>";aos_string_t bucket;aos_string_t object;apr_time_t now;int64_t expire_time; int one_hour = 3600;char *url_str = NULL;aos_pool_create(&p, NULL);/* 创建并初始化options */options = oss_request_options_create(p);init_options(options);/* 初始化参数 */aos_str_set(&bucket, bucket_name);aos_str_set(&object, object_name);req = aos_http_request_create(p);req->method = HTTP_PUT;now = apr_time_now(); //millisecondexpire_time = now / 1000000 + one_hour;/* 生成签名url */url_str = oss_gen_signed_url((options, &bucket, &object, expire_time, req);printf("临时上传url:%s\n", url_str);aos_pool_destroy(p); 使用签名URL下载文件aos_pool_t *p;oss_request_options_t *options;aos_http_request_t *req;aos_table_t *headers;aos_table_t *resp_headers;char *bucket_name = "<您的bucket名字>";char *object_name = "<您的object名字>";char *filepath = "<本地文件路径>";aos_string_t bucket;aos_string_t object;aos_string_t file;char *url_str;apr_time_t now;int64_t expire_time; int one_hour = 3600;aos_pool_create(&p, NULL);/* 创建并初始化options */options = oss_request_options_create(p);init_options(options);/* 初始化参数 */aos_str_set(&bucket, bucket_name);aos_str_set(&object, object_name);aos_str_set(&file, filepath);headers = aos_table_make(p, 0);req = aos_http_request_create(p);req->method = HTTP_GET;now = apr_time_now(); /* 单位:微秒 */expire_time = now / 1000000 + one_hour;/* 生成签名url */url_str = oss_gen_signed_url(options, &bucket, &object, expire_time, req);/* 使用签名url下载文件 */s = oss_get_object_to_file_by_url(options, url_str, headers, &file, &resp_headers);if (aos_status_is_ok(s)) { printf("get object succeeded\n");} else { printf("get object failed\n");}aos_pool_destroy(p); 使用URL签名的方式上传文件aos_pool_t *p;int is_oss_domain = 1;//是否使用三级域名oss_request_options_t *options;aos_http_request_t *req;aos_table_t *headers;aos_table_t *resp_headers;char *bucket_name = "<您的bucket名字>";char *object_name = "<您的object名字>";char *filepath = "<本地文件路径>";aos_string_t bucket;aos_string_t object;aos_string_t file;char *url_str;apr_time_t now;int64_t expire_time; int one_hour = 3600;aos_pool_create(&p, NULL);/* 创建并初始化options */options = oss_request_options_create(p);init_options(options);/* 初始化参数 */aos_str_set(&bucket, bucket_name);aos_str_set(&object, object_name);aos_str_set(&file, filepath);headers = aos_table_make(p, 0);req = aos_http_request_create(p);req->method = HTTP_PUT;now = apr_time_now(); /* 单位:微秒*/expire_time = now / 1000000 + one_hour;/* 生成签名url */url_str = oss_gen_signed_url(options, &bucket, &object, expire_time, req);/* 使用签名url上传文件 */s = oss_put_object_from_file_by_url(options, url_str, &file, headers, &resp_headers);if (aos_status_is_ok(s)) { printf("put objects by signed url succeeded\n");} else { printf("put objects by signed url failed\n");}aos_pool_destroy(p);

2019-12-01 23:14:42 0 浏览量 回答数 0

问题

mac下编译php5.6.17出错,configure 没有问题,make出错? 400 请求出错 

kun坤 2020-05-25 20:35:51 10 浏览量 回答数 1

问题

C-SDK之如何实现授权访问(二)?

青衫无名 2019-12-01 21:46:05 1010 浏览量 回答数 0

问题

mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定?mysql

保持可爱mmm 2020-05-16 22:22:31 0 浏览量 回答数 1

回答

HI,tsvector,tsquery 的相似度计算用到的这个函数。Datum rum_ts_distance_tt(PG_FUNCTION_ARGS) { TSVector txt = PG_GETARG_TSVECTOR(0); TSQuery query = PG_GETARG_TSQUERY(1); float4 res; res = calc_score(weights, txt, query, DEF_NORM_METHOD); PG_FREE_IF_COPY(txt, 0); PG_FREE_IF_COPY(query, 1); if (res == 0) PG_RETURN_FLOAT4(get_float4_infinity()); else PG_RETURN_FLOAT4(1.0 / res); } static float4 calc_score(float4 *arrdata, TSVector txt, TSQuery query, int method) { DocRepresentation *doc; uint32 len, doclen = 0; double Wdoc = 0.0; QueryRepresentation qr; qr.query = query; qr.map_item_operand = NULL; qr.operandexist = (bool *) palloc0(sizeof(bool) * query->size); qr.lenght = query->size; doc = get_docrep(txt, &qr, &doclen); if (!doc) { pfree(qr.operandexist); return 0.0; } Wdoc = calc_score_docr(arrdata, doc, doclen, &qr, method); if ((method & RANK_NORM_LOGLENGTH) && txt->size > 0) Wdoc /= log((double) (count_length(txt) + 1)); if (method & RANK_NORM_LENGTH) { len = count_length(txt); if (len > 0) Wdoc /= (double) len; } if ((method & RANK_NORM_UNIQ) && txt->size > 0) Wdoc /= (double) (txt->size); if ((method & RANK_NORM_LOGUNIQ) && txt->size > 0) Wdoc /= log((double) (txt->size + 1)) / log(2.0); pfree(doc); pfree(qr.operandexist); return (float4) Wdoc; }

德哥 2019-12-01 23:40:16 0 浏览量 回答数 0

问题

映射到hbm.xml文件时无法提取ResultSet

小六码奴 2019-12-01 19:59:52 9 浏览量 回答数 0

问题

关于javascript原型对象的一些问题

小旋风柴进 2019-12-01 20:26:00 875 浏览量 回答数 1

问题

急!android编写高分榜Activity因为SQLite无法实现跳转,求大神找错

a123456678 2019-12-01 20:26:34 806 浏览量 回答数 1

回答

1、实例化对象box的__proto__访问的是原型对象的prototype,原型对象的constructor属性指向Box()。2、box.method()方法和box.__proto__.method()都访问method()的方法,区别是,box.method()方法首先会在box的实例属性中访问method方法,如果找不到,再访问Box.prototype。访问原型的属性和方法用box.__proto__,但这个__proto__属性不是ECMAScript标准化的属性,不是所有浏览器都支持。ECMAScript5标准化的方法为Object.getPrototypeOf()。3、对象Box的原型对象为Box.prototype。4、这个我不知道。5、这个是继承中原型链的概念,如果原型对象的__proto__中,即Box.prototype中包含一个(或多个)属性为另一个对象(父对象),而父对象又有原型对象,那么Box原型对象的__proto__属性指向父对象的原型。6、我认为,JS中,Box的构造函数是通过函数来实现的,根据JS原则,函数的作用域是一个封闭的子作用域,不同实例化对象通过构造函数实例化的属性被隔离成一个个封闭的作用域,不能直接互相访问。而原型是在全局作用域下定义的,所有的实例化对象访问的都是同一份原型属性,所以,我认为构造函数Box没有__proto__属性。

小旋风柴进 2019-12-02 02:14:03 0 浏览量 回答数 0

回答

PHP7的扩展,在对象方面有些改进。具体我也不多说了。给你个例子。自己看下。并且给了完整的代码实现。完整代码下载本篇文章主要将如何在扩展中创建一个对象。创建的对象的过程,其实和一个小孩出生,成长的过程有些类似。第一步,办准生证生孩子第一步,先办准生证。声明我要生孩子了。对象创建的时候,如何办准生证呢?只要定义一个zend_class_entry变量即可。代码如下:zend_class_entry ce;zend_class_entry 是啥?可以认为它使一个原型,定义了一些对象应该有哪些东西组成。具体代码可以查看./Zend/zend.h文件。第二步,取名字孩子怎么得有个名字,对象也一样。如何给对象取名字呢?代码如下:INIT_CLASS_ENTRY(ce, &amp;quot;children&amp;quot;, children_methods);其中,children就是我们给对象取的名字。那children_methods是啥?它是这个小孩应该具备的能力(对象所拥有的方法)。第三步,上户口孩子出生了,名字有了,下面就得上户口了。上户口的过程就是登记入册的过程。代码如下:zend_class_entry *children_ce; children_ce = zend_register_internal_class(&amp;amp;ce);zend_register_internal_class方法会返回一个zend_class_entry指针。以后我们对这个对象的操作,可以使用这个指针。培养(定义属性和方法)孩子已经上户口了。接下来,我们就是认真的培养他。培养成对社会有用的人。那么如何培养呢?主要从两方面入手。第一方面是教授知识(定义属性),另一方面是培养其行为能力(定义方法)。定义属性,我们使用zend_declare_property*系列方法。代码示例如下:zend_declare_property_null(children_ce, &amp;quot;memory&amp;quot;, sizeof(&amp;quot;memory&amp;quot;) - 1, ZEND_ACC_PUBLIC); 上面的代码我们就声明了一个名称为memory的属性,并且设置访问类型为 public。定义方法的过程更简单。还记得我们在上户口的时候,登记了children_methods。这个就是孩子行为的一个集合。这个行为集合如何产生的呢?代码如下:ZEND_BEGIN_ARG_INFO_EX(arginfo_children_learn, 0, 0, 1) ZEND_ARG_INFO(0, love) ZEND_END_ARG_INFO() PHP_METHOD(children, learn); const zend_function_entry children_functions[] = { PHP_FE(learn, arginfo_children_learn) PHP_FE_END }ZEND_BEGIN_ARG_INFO_EX的最后一个参数1,是传递的参数的个数。ZEND_ARG_INFO的第一个参数0,表示是否传引用方式传递。一般默认为0即可。完整代码至此,我们已经定义了一个对象,拥有属性memory和方法learn。完整的代码如下:zend_class_entry *children_ce; ZEND_BEGIN_ARG_INFO_EX(arginfo_children_learn, 0, 0, 1) ZEND_ARG_INFO(0, love) ZEND_END_ARG_INFO() const zend_function_entry children_functions[] = { PHP_ME(children, learn, arginfo_children_learn, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} } PHP_MINIT_FUNCTION(children) { zend_class_entry ce; INIT_CLASS_ENTRY(ce, &amp;quot;children&amp;quot;, children_methods); children_ce = zend_register_internal_class(&amp;amp;ce); zend_declare_property_null(children_ce, &amp;quot;memory&amp;quot;, sizeof(&amp;quot;memory&amp;quot;) - 1, ZEND_ACC_PUBLIC); } PHP_METHOD(children, learn) { char *love; size_t love_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), &amp;quot;s&amp;quot;,&amp;amp;content, &amp;amp;content_len) == FAILURE) { return; } zend_update_property_string(children_ce, getThis(), &amp;quot;memory&amp;quot;, sizeof(&amp;quot;memory&amp;quot;) - 1, love); }PHP调用代码&amp;lt;?php $children = new children(); var_dump($children-&amp;gt;memory); $children-&amp;gt;learn(&amp;quot;love&amp;quot;); var_dump($children-&amp;gt;memory); ?&amp;gt;输出内容如下:NULL string(4) &amp;quot;love&amp;quot;完整代码下载

exinnet 2019-12-02 01:31:23 0 浏览量 回答数 0

回答

我们还没有谈到__exit__方法的这三个参数:type, value和traceback。 在第4步和第6步之间,如果发生异常,Python会将异常的type,value和traceback传递给__exit__方法。 它让__exit__方法来决定如何关闭文件以及是否需要其他步骤。在我们的案例中,我们并没有注意它们。 那如果我们的文件对象抛出一个异常呢?万一我们尝试访问文件对象的一个不支持的方法。举个例子: with File('demo.txt', 'w') as opened_file: opened_file.undefined_function('Hola!') 我们来列一下,当异常发生时,with语句会采取哪些步骤。 1. 它把异常的type,value和traceback传递给__exit__方法 2. 它让__exit__方法来处理异常 3. 如果__exit__返回的是True,那么这个异常就被优雅地处理了。 4. 如果__exit__返回的是True以外的任何东西,那么这个异常将被with语句抛出。 在我们的案例中,__exit__方法返回的是None(如果没有return语句那么方法会返回None)。因此,with语句抛出了那个异常。 Traceback (most recent call last): File "<stdin>", line 2, in <module> AttributeError: 'file' object has no attribute 'undefined_function' 我们尝试下在__exit__方法中处理异常: class File(object): def __init__(self, file_name, method): self.file_obj = open(file_name, method) def __enter__(self): return self.file_obj def __exit__(self, type, value, traceback): print("Exception has been handled") self.file_obj.close() return True with File('demo.txt', 'w') as opened_file: opened_file.undefined_function() # Output: Exception has been handled 我们的__exit__方法返回了True,因此没有异常会被with语句抛出。 这还不是实现上下文管理器的唯一方式。还有一种方式,我们会在下一节中一起看看。

montos 2020-04-16 21:46:01 0 浏览量 回答数 0

问题

TypeError:python中格式字符串不足的参数

保持可爱mmm 2019-12-18 17:02:05 0 浏览量 回答数 1

问题

oss c sdk利用CURL提供的Callback实现上传

yjseu 2019-12-01 21:49:22 10252 浏览量 回答数 2

问题

类型错误:python中没有足够的格式字符串参数

kun坤 2019-12-25 22:07:11 3 浏览量 回答数 1

问题

买了阿里云免费的SSL,但是配置有点问题

牛肉汤123 2019-12-01 20:24:57 1883 浏览量 回答数 2

问题

买了阿里云免费的

牛肉汤123 2019-12-01 20:24:57 1504 浏览量 回答数 1

问题

python将方法转换为函数

kun坤 2019-12-25 09:23:42 0 浏览量 回答数 0

问题

得到CursorIndexOutOfBoundsException的原因

吴孟桥 2019-12-01 19:49:19 917 浏览量 回答数 1

问题

C-SDK之如何实现授权访问(一)?

青衫无名 2019-12-01 21:46:04 1099 浏览量 回答数 0

问题

so找不到

游客aqpqenklvwob2 2019-12-01 19:34:26 919 浏览量 回答数 1

问题

squid 不能hit:报错

kun坤 2020-06-14 13:40:13 0 浏览量 回答数 1

问题

使用带有2个主键模型基于view UpdateView的类

一码平川MACHEL 2019-12-01 19:32:04 377 浏览量 回答数 1

问题

linux ssh 配置登录问题

赤脚大仙 2019-12-01 19:44:25 3922 浏览量 回答数 2
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播