对于JavaScript:Class.method与Class.prototype.method感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于classmethod&staticmeth
对于JavaScript:Class.method 与 Class.prototype.method感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于classmethod&staticmethod 以及 __slots__、django classonlymethod和python classmethod有什么区别?、easypermissions拒绝权限后闪退。 java.lang.NoSuchMethodError: No virtual method isStateSaved()Z in class L...、groovy – metaClass.methods和metaClass.metaMethods有什么区别?的宝贵知识。
本文目录一览:- JavaScript:Class.method 与 Class.prototype.method
- classmethod&staticmethod 以及 __slots__
- django classonlymethod和python classmethod有什么区别?
- easypermissions拒绝权限后闪退。 java.lang.NoSuchMethodError: No virtual method isStateSaved()Z in class L...
- groovy – metaClass.methods和metaClass.metaMethods有什么区别?
JavaScript:Class.method 与 Class.prototype.method
以下两个声明有什么区别?
Class.method = function () { /* code */ }Class.prototype.method = function () { /* code using this.values */ }
是否可以将第一条语句视为静态方法的声明,将第二条语句视为实例方法的声明?
答案1
小编典典是的,第一个函数与该构造函数的对象实例没有关系,您可以将其视为
“静态方法” 。
在 JavaScript 中,函数是 一等
对象,这意味着您可以像对待任何对象一样对待它们,在这种情况下,您只需向 函数对象 添加一个属性。
第二个函数,当您扩展构造函数原型时,它将可用于使用new
关键字创建的所有对象实例,并且该函数中的上下文(this
关键字)将引用您调用它的实际对象实例。
考虑这个例子:
// constructor functionfunction MyClass () { var privateVariable; // private member only available within the constructor fn this.privilegedMethod = function () { // it can access private members //.. };}// A ''static method'', it''s just like a normal function // it has no relation with any ''MyClass'' object instanceMyClass.staticMethod = function () {};MyClass.prototype.publicMethod = function () { // the ''this'' keyword refers to the object instance // you can access only ''privileged'' and ''public'' members};var myObj = new MyClass(); // new object instancemyObj.publicMethod();MyClass.staticMethod();
classmethod&staticmethod 以及 __slots__
什么是
python
中的classmethod
,它的用途是什么?-
classmethod
装饰器对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。class Demo: @classmethod def klassmeth(*args): return args """ Usage:: >>>Demo.klassmeth() >>> (<class ''__main__.Demo''>, ''span'') """
-
klasssmeth 返回全部位置参数
- 不管怎么样调用
Demo.klassmenth
,它的第一个参数始终是Demo
类. -
什么是
python
中的staticmethod
,它的用途是什么?-
staticmethod
是一个将类中的方法静态化,无需实例便可调用.#!/usr/bin/python # -*- coding: UTF-8 -*- class C(object): @staticmethod def f(): print(''runoob''); C.f(); # 静态方法无需实例化 cobj = C() cobj.f() # 也可以实例化后调用
-
-
__slots__
用于什么地方?- 首先我们要明白一个概念.默认情况下
Python
在各个实例中名为__dict__
的字典里存储的实力属性,为了是底层的散列表提升访问速度,字典会消耗大量内存. - 通过
__slots__
类属性,能节省大量内存.方法事让解释器在元组中存储属性,而不是字典. - 继承自超类
__slots__
属性没有效果,Python
只会使用各个类中定义的__slots__
属性. - 定义
__slots__
属性之后,实例不能再有__slots__
中所列名称之外的其他属性. - 如果把
__dict__
这个名称添加到__slots__
中,是一个糟糕的选择. - 如果不把
__weakref__
加入__slots__
,实例就不能作为弱引用的目标.
- 首先我们要明白一个概念.默认情况下
django classonlymethod和python classmethod有什么区别?
为什么Django需要引入装饰器classonlymethod
?为什么它不能重用python classmethod
?
答案1
小编典典最好的解释是源代码本身:
class classonlymethod(classmethod): def __get__(self, instance, cls=None): if instance is not None: raise AttributeError("This method is available only on the class, not on instances.") return super().__get__(instance, cls)
区别在于,classmethod
可以在实例上调用a,与在类上调用具有相同的效果,但是classonlymethod
只能在类上调用。
easypermissions拒绝权限后闪退。 java.lang.NoSuchMethodError: No virtual method isStateSaved()Z in class L...
Process: com.tazan.cd.streetlight, PID: 18825
java.lang.NoSuchMethodError: No virtual method isStateSaved()Z in class Landroid/support/v4/app/FragmentManager; or its super classes (declaration of ''android.support.v4.app.FragmentManager'' appears in /data/app/com.tazan.cd.streetlight-sc-sX-rNCVNlO4qWt3BQkw==/base.apk:classes20.dex)
at pub.devrel.easypermissions.RationaleDialogFragmentCompat.showAllowingStateLoss(RationaleDialogFragmentCompat.java:48)
at pub.devrel.easypermissions.helper.BaseSupportPermissionsHelper.showRequestPermissionRationale(BaseSupportPermissionsHelper.java:43)
at pub.devrel.easypermissions.helper.PermissionHelper.requestPermissions(PermissionHelper.java:66)
at pub.devrel.easypermissions.EasyPermissions.requestPermissions(EasyPermissions.java:148)
at com.tazan.cd.streetlight.activity.MainActivity.requestCodeQRCodePermissions(MainActivity.java:615)
at com.tazan.cd.streetlight.activity.MainActivity.onStart(MainActivity.java:553)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1339)
at android.app.Activity.performStart(Activity.java:7392)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3157)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
错误大致如上:
问题是 isStateSaved是在support 26版本后加入的,可以 compileSdkVersion改为27,并且将easypermissions更新到最新版2.0.1
或在app的build.gradle里加入下面一段代码统一android support库为27版本
subprojects {
afterEvaluate {project ->
if (project.hasProperty("android")) {
android {
compileSdkVersion 27
buildToolsVersion ''27.0.3''
defaultConfig {
targetSdkVersion 27
}
}
}
}
}
groovy – metaClass.methods和metaClass.metaMethods有什么区别?
class Example { def realFoo() { "foo" } } Example.MetaClass.MetaFoo = { -> "foo" } def reals = Example.MetaClass.methods*.name.grep{it.contains("Foo")} def Metas = Example.MetaClass.MetaMethods*.name.grep{it.contains("Foo")} println "reals = $reals,Metas = $Metas"
我希望reals的输出= [realFoo],Metas = [MetaFoo],但实际上我得到的是reals = [realFoo,MetaFoo],Metas = [].
看起来新的元方法存储在方法中,而不是MetaMethods.那么,MetaClass.methods和MetaClass.MetaMethods有什么区别?
解决方法
这些在DefaultGroovyMethods类中定义.
根据您要实例化的对象类型,它主要是迭代器,如每个,收集,查找等.
对代码的这种修改显示了仅限元,仅“真实”和共享的方法:
class Example { def realFoo() { "foo" } } Example.MetaClass.MetaFoo = { -> "foo" } def reals = Example.MetaClass.methods.name.sort().unique() def Metas = Example.MetaClass.MetaMethods.name.sort().unique() def MetaOnly = Metas - reals def realOnly = reals - Metas def shared = reals.findAll { Metas.contains(it) } println """ MetaOnly = $MetaOnly realOnly = $realOnly shared = $shared """
结果:
MetaOnly = [addShutdownHook,any,asBoolean,asType,collect,dump,each,eachWithIndex,every,find,findAll,findindexOf,findindexValues,findLastIndexOf,findResult,getAt,getMetaPropertyValues,getProperties,grep,hasProperty,identity,inject,inspect,is,isCase,iterator,MetaClass,print,printf,println,putAt,respondsTo,sleep,split,sprintf,use,with] realOnly = [equals,getClass,getProperty,hashCode,MetaFoo,notify,notifyAll,realFoo,setProperty,wait] shared = [getMetaClass,invokeMethod,setMetaClass,toString]
所有MetaOnly和shared方法都在DefaultGroovyMethods中.所有“真正的”方法都在类本身上,或者在它的父类(在本例中为Object)上,加上一些直接与MetaClass相关的groovy事物来获取/设置MetaClass以及getProperty / setProperty和invokeMethod它允许您覆盖方法行为.
如果你想搜索所有方法以查看存在的内容,我会使用以下内容:
def allMethods = (Example.MetaClass.methods + Example.MetaClass.MetaMethods).name.sort().unique()
今天的关于JavaScript:Class.method 与 Class.prototype.method的分享已经结束,谢谢您的关注,如果想了解更多关于classmethod&staticmethod 以及 __slots__、django classonlymethod和python classmethod有什么区别?、easypermissions拒绝权限后闪退。 java.lang.NoSuchMethodError: No virtual method isStateSaved()Z in class L...、groovy – metaClass.methods和metaClass.metaMethods有什么区别?的相关知识,请在本站进行查询。
本文标签: