Python:在实例方法中一般地引用类?
此问题类似,但与静态方法有关: 如何在实例方法中泛指类 e、 gPython:在实例方法中一般地引用类?,python,syntax,programming-languages,Python,Syntax,Programming Languages,此问题类似,但与静态方法有关: 如何在实例方法中泛指类 e、 g 新样式类具有self.\u class\u属性 在兼容3.x的Python中,所有类都是新样式的 在3.x之前,使用类AOObject:将其声明为新样式。新样式类具有self.\u class\u属性 在兼容3.x的Python中,所有类都是新样式的 在3.x之前,使用类AOObject:将其声明为新样式。对于旧样式的类,如果您的代码是Python2.x代码,并且您的类不继承自对象,请使用 对于新样式的类,如果您的代码是Pytho
新样式类具有self.\u class\u属性 在兼容3.x的Python中,所有类都是新样式的
在3.x之前,使用类AOObject:将其声明为新样式。新样式类具有self.\u class\u属性 在兼容3.x的Python中,所有类都是新样式的 在3.x之前,使用类AOObject:将其声明为新样式。对于旧样式的类,如果您的代码是Python2.x代码,并且您的类不继承自对象,请使用 对于新样式的类,如果您的代码是Python 3代码,请使用: 在内部,type使用属性。对于旧式类,如果您的代码是Python2.x代码,并且您的类不从对象继承,请使用 对于新样式的类,如果您的代码是Python 3代码,请使用:
在内部,type使用该属性。不从object继承的pre 3.x如何?@pokstad旧式类具有相同的可用属性。有关详细信息,请参阅我的答案。我不知道为什么它当前被选为-1。如果不从object继承,3.x之前的版本会怎么样?@pokstad Old style classes具有相同的可用属性。有关详细信息,请参阅我的答案,我不知道为什么它现在被选为-1。我假设这是Python 3代码,在他们的头脑中,他们会选择使用旧式类?。更新了python 2的解释。如果您想同时支持旧样式类和新样式类,请使用_uclass_uu.+1验证这在不从2.7上的对象继承时是否正确。为什么有人更喜欢使用类型而不是类?@pokstad:它没有太多的下划线:D而且,对象可能会做一些愚蠢的事情并覆盖类,但它不能愚弄类型。@pokstad\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,它们可以随着时间的推移而改变。例如,一个高级解释器,例如,当它可以静态或动态地确定该值为常量时,甚至可能不存储该类。相比之下,type是一个有很好文档记录的函数,它永远不会消失。@lunixbochs对不起,您指的是哪个示例?对我来说,Python2.4、2.5、2.6和2.7版本的作品。从:如果x是一个旧式类的实例,那么x.uuuu class_uuuuu指定了x的类。我假设这是Python 3代码,在他们的头脑中,谁会选择使用旧式类?。更新了python 2的解释。如果您想同时支持旧样式类和新样式类,请使用_uclass_uu.+1验证这在不从2.7上的对象继承时是否正确。为什么有人更喜欢使用类型而不是类?@pokstad:它没有太多的下划线:D而且,对象可能会做一些愚蠢的事情并覆盖类,但它不能愚弄类型。@pokstad\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,它们可以随着时间的推移而改变。例如,一个高级解释器,例如,当它可以静态或动态地确定该值为常量时,甚至可能不存储该类。相比之下,type是一个有很好文档记录的函数,它永远不会消失。@lunixbochs对不起,您指的是哪个示例?对我来说,Python2.4、2.5、2.6和2.7版本的作品。从:如果x是一个旧式类的实例,那么x.uuuu class_uuuuu指定x的类。
#!/usr/bin/python
class a:
b = 'c'
def __init__(self):
print(a.b) # <--- not generic because you explicitly refer to 'a'
@classmethod
def instance_method(cls):
print(cls.b) # <--- generic, but not an instance method
def __init__(self):
print(self.__class__.b) # Python 2.x and old-style class
def __init__(self):
print(self.__class__.b) # __class__ works for a new-style class, too
print(type(self).b)