术语:“类对象”和“类实例的方法”

时间:2017-09-17 14:30:45

标签: python python-3.x oop

来自https://docs.python.org/3/reference/expressions.html#calls

  

主要必须求值为可调用对象(用户定义函数,内置函数,内置对象方法,类       对象类实例的方法,以及所有具有的对象       __call__()方法是可调用的)。

  1. “类对象”是指“类的实例”还是“类 他们自己作为对象“?我猜它试图意味着后者,但是 措辞似乎意味着前者。如果我是对的,用C ++和 Java,对象总是指某些类的实例,即 可能是我困惑的原因。有哪些名字 用于引用“类的实例”?
  2. “类实例的方法”是否意味着“作为属性的函数” 某些类的实例“或”作为某些类的属性 在类的实例上运行的类“?我想它会尝试 意思是后者,但措辞似乎意味着前者。一个 类的实例可能具有不属于属性的属性 该类的功能:

    class C:
        pass
    
    c=C()
    def f():
        pass
    
    c.myfun=f
    

    其中c.myfun是实例c的函数属性,而不是 类C的函数属性。

    通常用于指代某个属性的名称是什么 类的实例,它不是类的属性?

  3. 感谢。

1 个答案:

答案 0 :(得分:2)

类对象引用类对象..不是该类的实例。

>>> C
<class __main__.C at 0x01FA89D0>

python中的所有内容都是一个对象。有一流的对象(这里有关于这个主题https://stackoverflow.com/a/245208/840582的很好的答案)。

&#39;类实例的方法&#39;指的是在类中定义的方法(函数),并且绑定到实例

class C:
    pass

    def inst_f(self):
        pass

>>> c
<__main__.C instance at 0x0293A5F8>
>>> c.inst_f
<bound method C.inst_f of <__main__.C instance at 0x0293A5F8>>
>>> f
<function f at 0x02986070>

类实例是使用该类创建的对象; a = C() a是C的实例。您可以在<__main__.C instance at 0x0293A5F8>

中看到它

通常,您在以self开头的类定义代码中看到的所有内容都是该类实例的属性。这些被称为实例变量

类变量(即,所有对象实际上共享同一个变量)是在没有self.前缀的情况下定义的。例如,

class C:
    cls_var = 'static'  # this is a class attribute

    def __init__(self, x):
        self.x = x  # this is an instance attribute 

    def inst_f(self):
        pass

a = C('this is a')
b = C('this is b')

print a.x is b.x  # False

print a.cls_var  # static

print a.cls_var is b.cls_var  # True