在本文中,我们将为您详细介绍将装饰器应用于类中的每个方法?的相关知识,并且为您解答关于将装饰器应用于类中的每个方法是什么的疑问,此外,我们还会提供一些关于android–ForceProguard给一
在本文中,我们将为您详细介绍将装饰器应用于类中的每个方法?的相关知识,并且为您解答关于将装饰器应用于类中的每个方法是什么的疑问,此外,我们还会提供一些关于android – Force Proguard给一个类中的每个方法一个唯一的名字?、java – 如何使用log4j自动记录在类中调用的每个方法、php – 有没有办法表明一个类是否为另一个类的每个方法定义了魔术方法?、python 装饰器调用其他类中的方法的有用信息。
本文目录一览:- 将装饰器应用于类中的每个方法?(将装饰器应用于类中的每个方法是什么)
- android – Force Proguard给一个类中的每个方法一个唯一的名字?
- java – 如何使用log4j自动记录在类中调用的每个方法
- php – 有没有办法表明一个类是否为另一个类的每个方法定义了魔术方法?
- python 装饰器调用其他类中的方法
将装饰器应用于类中的每个方法?(将装饰器应用于类中的每个方法是什么)
我有装饰器@login_testuser
应用于方法test_1()
:
class TestCase(object):
@login_testuser
def test_1(self):
print "test_1()"
有没有我可以申请的方式@login_testuser
对 每一个 前缀类的方法"test_"
?
换句话说,装饰将适用于test_1()
,test_2()
下面,但不是方法setUp()
。
class TestCase(object):
def setUp(self):
pass
def test_1(self):
print "test_1()"
def test_2(self):
print "test_2()"
android – Force Proguard给一个类中的每个方法一个唯一的名字?
我正在使用Proguard来混淆Android应用程序.一切正常,但我正在努力从错误报告中回溯堆栈跟踪.
这是我混淆代码的摘录:
private ez a(x paramx)
{
return (ez)this.J.get(paramx);
}
private void a(com.b.a.f paramf)
{
Iterator localIterator = this.K.iterator();
while (true)
{
if (!localIterator.hasNext())
return;
em localem = (em)localIterator.next();
if (localem.a((int)(this.i / this.m - 202.0F), (int)(202.0F + (this.i + this.n) / this.m), (int)(this.j / this.m - 202.0F), (int)(202.0F + (this.j + this.o) / this.m)))
localem.a(paramf, this.m, this.i, this.j);
}
}
private void a(com.b.a.f paramf, int paramInt1, int paramInt2, int paramInt3, int paramInt4)
{
Iterator localIterator = this.J.entrySet().iterator();
while (true)
{
if (!localIterator.hasNext())
return;
ez localez = (ez)((Map.Entry)localIterator.next()).getValue();
if (localez.a(paramInt1, paramInt2, paramInt3, paramInt4))
localez.a(paramf, this.k, this.m, this.i, this.j);
}
}
您会注意到上面的所有3种方法(取自同一类)具有相同的名称=’a’.当然,这在运行时不会导致问题,因为它们具有不同的参数.但是在我混淆的堆栈跟踪中:
java.lang.Arrayindexoutofboundsexception: length=0; index=0
at java.util.concurrent.copyOnWriteArrayList.get(copyOnWriteArrayList.java:117)
at uk.co.ionage.ionage.co.a(UnkNown Source)
at uk.co.ionage.ionage.co.g(UnkNown Source)
at uk.co.ionage.ionage.n.b(UnkNown Source)
at uk.co.ionage.ionage.n.a(UnkNown Source)
at uk.co.ionage.ionage.co.a(UnkNown Source)
at uk.co.ionage.ionage.co.a(UnkNown Source)
at uk.co.ionage.ionage.Gameplay.a(UnkNown Source)
at uk.co.ionage.ionage.cn.run(UnkNown Source)
这是个问题.我不知道它指的是哪种’a’方法.当我使用retrace.bat时,它会列出名为’a’的所有方法.
这是我的proguard.config:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-dontwarn android.support.**
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.broadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with
#fields. Proguard removes such information by default, so configure it to keep
#all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.gameanalytics.android.** { *; }
##---------------End: proguard configuration for Gson ----------
这是非常典型的,除了我在最后添加了一点来帮助支持我使用JSON / GSON.
我可以添加一个选项来强制proguard为每个方法指定一个不同的名称吗?
解决方法:
堆栈跟踪变得模糊,因为缺少行号.您可以使用以下ProGuard选项保留它们:
-renamesourcefileattribute MyApplication
-keepattributes SourceFile,LineNumberTable
请参阅ProGuard手册> ReTrace> Usage.
请参阅ProGuard手册>例子> Producing useful stack traces
或者,您可以指定唯一的名称:
-useuniqueclassmembernames
然而.方法名称可以重载开始,ProGuard不会改变它.
附注:如果正确设置project.properties,最新版本的Android SDK会自动应用配置的默认部分:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
java – 如何使用log4j自动记录在类中调用的每个方法
logger.debug("foo(id="+id+") initiated");
是否可以自动执行?也许通过在每个方法的开始使用某种注释,而不是写每个logger.debug?
今天我每次更改参数或方法名时,都必须更新我的logging.debug.
解决方法
@Loggable
注释和AspectJ方面:
@Loggable(Loggable.INFO) public String load(URL url) { return url.openConnection().getContent(); }
所有方法调用都通过SLF4J进行记录.
php – 有没有办法表明一个类是否为另一个类的每个方法定义了魔术方法?
我正在使用PHPStorm,所以我会对任何可以自动完成正常工作的解决方案感到满意.
class A { // a bunch of functions go here... } /** * Class B * What should go here to make it work??? */ class B { private $aInstance; public function __construct() { $this->aInstance = new A(); } public function __call($name,$arguments) { // Todo: Implement __call() method. if(method_exists($this->aInstance,$name)) { return $this->aInstance->{$name}(...$arguments); } throw new BadMethodCallException(); } // a bunch more functions go here... }
这种方法需要单独列出每种方法.更多关于此问题的另一个StackOverflow问题/答案:https://stackoverflow.com/a/15634488/783119.
在当前的PHPStorm版本中,您可以使用非PHPDoc规范(因此可能使用PHPStorm特定的)@mixin标记.
在目标类的PHPDoc注释中添加@mixing className应该为您完成工作.
/** * Class B * * @mixin A */ class B {
基本上,@ mixin标签可以实现PHP的实际特性.
请注意,不能保证在将来的某个时候不会删除对此类标记的支持,尽管这种可能性不大.
python 装饰器调用其他类中的方法
场景:
做自动化是,每次都需要调用登录方法,代码重复比较多,在这种场景下,将登录功能抽取为装饰器 demo
class Test:
data= get_yaml_date_by_fillter(filename =''warehouse_case.yaml'',filter=''whpage'')
@ddt.data(*data)
@login
def test_OpenWareHouse_Info(self,data):
try:
for key in data:
result = WarehouseInfo.openWareHouseInfo(self)
if result == data[key][''assert'']:
logger.info(''%s 测试结果:%s'' % (key, ''通过''))
self.assertEqual(result,data[key][''assert''])
except:
raise
def login(func):
''''''
登录功能抽取为装饰器
:param func:
:return:
''''''
# 获取正确登录密码账号登录系统
login_data = get_yaml_date_by_fillter(filename=''login.yaml'', filter=''login'')[2]
def wrapper(self,*args):
# 调用登录方法
result = LoginModel.login_success(self,login_data[''login_case_003''])
if result != None:
return func(self,*args)
else:
print(''登录失败'')
return wrapper
关于将装饰器应用于类中的每个方法?和将装饰器应用于类中的每个方法是什么的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android – Force Proguard给一个类中的每个方法一个唯一的名字?、java – 如何使用log4j自动记录在类中调用的每个方法、php – 有没有办法表明一个类是否为另一个类的每个方法定义了魔术方法?、python 装饰器调用其他类中的方法等相关内容,可以在本站寻找。
本文标签: