GVKun编程网logo

将装饰器应用于类中的每个方法?(将装饰器应用于类中的每个方法是什么)

2

在本文中,我们将为您详细介绍将装饰器应用于类中的每个方法?的相关知识,并且为您解答关于将装饰器应用于类中的每个方法是什么的疑问,此外,我们还会提供一些关于android–ForceProguard给一

在本文中,我们将为您详细介绍将装饰器应用于类中的每个方法?的相关知识,并且为您解答关于将装饰器应用于类中的每个方法是什么的疑问,此外,我们还会提供一些关于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给一个类中的每个方法一个唯一的名字?

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自动记录在类中调用的每个方法

java – 如何使用log4j自动记录在类中调用的每个方法

我有一个数据库调用的类,我通常希望使用log4j记录这个类中带有参数的每个方法(带参数):
logger.debug("foo(id="+id+") initiated");

是否可以自动执行?也许通过在每个方法的开始使用某种注释,而不是写每个logger.debug?

今天我每次更改参数或方法名时,都必须更新我的logging.debug.

解决方法

从 jcabi-aspects(我是开发人员)尝试 @Loggable注释和AspectJ方面:
@Loggable(Loggable.INFO)
public String load(URL url) {
  return url.openConnection().getContent();
}

所有方法调用都通过SLF4J进行记录.

php – 有没有办法表明一个类是否为另一个类的每个方法定义了魔术方法?

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...
}
正确的解决方案是使用支持的@method PHPDoc标记.这样它也可以在支持PHPDoc的其他编辑器/ IDE中使用并理解这种标准标记.

这种方法需要单独列出每种方法.更多关于此问题的另一个StackOverflow问题/答案:https://stackoverflow.com/a/15634488/783119.

在当前的PHPStorm版本中,您可以使用非PHPDoc规范(因此可能使用PHPStorm特定的)@mixin标记.

在目标类的PHPDoc注释中添加@mixing className应该为您完成工作.

/**
 * Class B
 * 
 * @mixin A
 */
class B
{

基本上,@ mixin标签可以实现PHP的实际特性.

请注意,不能保证在将来的某个时候不会删除对此类标记的支持,尽管这种可能性不大.

python 装饰器调用其他类中的方法

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 装饰器调用其他类中的方法等相关内容,可以在本站寻找。

本文标签: