当前位置: 首页 > 面试题库 >

__getattr__用于python中的静态/类变量

司寇山
2023-03-14
问题内容

我有一个像这样的课程:

class MyClass:
     Foo = 1
     Bar = 2

每当调用MyClass.Foo或时MyClass.Bar,我需要在返回值之前调用自定义方法。Python可能吗?我知道创建类的实例并定义自己的__getattr__方法是可能的。但是我的scnenario涉及这样使用此类而不创建任何实例。

我还需要__str__在调用时str(MyClass.Foo)调用自定义方法。Python是否提供这种选项?


问题答案:

__getattr__()并且__str__()对象可以在其类上找到,因此,如果要为类自定义这些内容,则需要一个类。元类。

class FooType(type):
    def _foo_func(cls):
        return 'foo!'

    def _bar_func(cls):
        return 'bar!'

    def __getattr__(cls, key):
        if key == 'Foo':
            return cls._foo_func()
        elif key == 'Bar':
            return cls._bar_func()
        raise AttributeError(key)

    def __str__(cls):
        return 'custom str for %s' % (cls.__name__,)

class MyClass:
    __metaclass__ = FooType

# in python 3:
# class MyClass(metaclass=FooType):
#    pass


print MyClass.Foo
print MyClass.Bar
print str(MyClass)

印刷:

foo!
bar!
custom str for MyClass

不,对象不能截取对其属性之一进行字符串化的请求。为属性返回的对象必须定义自己的__str__()行为。



 类似资料:
  • 问题内容: Python中是否可以有静态类变量或方法?为此需要什么语法? 问题答案: 在类定义内声明但在方法内声明的变量是类或静态变量: 正如@ millerdev指出的那样,这将创建一个类级别的i变量,但这不同于任何实例级别的i变量,因此你可以 这与C ++和Java不同,但与C#并没有太大区别,在C#中,无法使用对实例的引用来访问静态成员。

  • 本文向大家介绍python类和函数中使用静态变量的方法,包括了python类和函数中使用静态变量的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python类和函数中使用静态变量的方法。分享给大家供大家参考。具体分析如下: 在python的类和函数(包括λ方法)中使用静态变量似乎是件不可能[Nothing is impossible]的事, 但总有解决的办法,下面通过实现一个类或函数

  • rank ▲ ✰ vote url 26 568 149 609 url 类里的静态变量 有可能在python中类有静态变量或方法?用什么语法实现? 变量是在类定义时声明的,不是在类方法或静态变量中: >>> class MyClass: ... i = 3 ... >>> MyClass.i 3 上面的"i"变量是类级别的,所以它是和所有实体级的"i"变量是不一样的,你可以: >>>

  • 问题内容: 如果我有以下python代码: 它抱怨 如何在方法中访问类/静态变量? 问题答案: 代替使用或。分配给将创建一个静态变量,分配给将创建一个实例变量。

  • 如果我在java类X中不使用任何setter/getter。当一个线程a具有类X的类级锁时,另一个线程B是否可以直接更改我的静态变量?? 假设线程A现在有类级锁。我可以从另一个线程B执行X.static\u variable=11吗? 我正在编写一段代码,以在java中获得死锁。 公共类A实现Runnable{ } } 公共类B实现Runnable{ } 但得到以下结果: 第二个有对象b的钥匙和等

  • 本文向大家介绍C++之类的静态变量,包括了C++之类的静态变量的使用技巧和注意事项,需要的朋友参考一下 成员变量 通过对象名能够访问public成员变量 每个对象都可以有只属于自己的成员变量 成员变量不能在对象之间共享 类的静态成员 静态成员变量 存储在 全局数据区 以上所述就是本文的全部内容了,希望大家能够喜欢。