对象与python中的实例

Jib*_*bin 7 c++ python object

在C++中,只有对象和类,其中对象是类的实例.

在Python中,类定义(即类的主体)称为对象.并且,C++中的对象在python中称为实例.

检查一下

我错了吗?

编辑:实际上有人可以解释对象与实例的示例差异

编辑:在python中,一切都将继承自对象类,因此一切都是对象(即对象类的对象).

Class也是一个对象(即对象类的对象).

Instance是用于调用任何类的对象的名称.(又名c ++对象).

请参考这个

kin*_*all 19

在Python中,类定义(即类的主体)称为对象

实际上,这仍然被称为Python中的一个类.这就是为什么你这样定义它:

class Foo(object):
    pass
Run Code Online (Sandbox Code Playgroud)

使用class关键字是因为结果仍称为类.

这个词object在括号中表示Foo是从被调用的类派生的object.不要混淆 - 任何现有的类都可以在这里使用; 事实上,不止一个.

你经常派出课程的原因object是一次历史性事故,但可能值得详细说明.Python的原始对象实现将用户定义的类和内置类型视为略有不同的类型.然后语言的设计者决定统一这两个概念.因此,派生自object(或来自其后代object)的类与派生的object类(称为新样式类)的行为略有不同.另一方面,旧式类是这样定义的:

class Foo:
    pass

class Bar(Foo):
    pass
Run Code Online (Sandbox Code Playgroud)

请注意,这些不会继承自object或继承自的任何其他内容object.这使他们成为旧式的课程.

使用Python 2.x时,您的类几乎总是应该继承object,因为新样式的对象可以通过几种小而重要的方式更好地工作.

为了进一步混淆,在Python 3.0及更高版本中,没有旧式类,因此您不必object显式派生.换句话说,所有上述类都是Python 3.x中的新式类.

现在,回到手头的问题.类对象,因为一切都是Python中的对象.列表,字典,整数,字符串,元组......所有这些都是对象,Python程序的构建块也是如此:模块,函数和类.您可以使用class关键字创建一个类,然后将其传递给函数,修改它等等.(为了完整性,您还可以使用该type()函数创建一个类.)

类是构建对象的模板,称为实例.这部分你已经知道了.您实例化类似于调用函数的对象,传入初始值和其他参数:

mylist = list("abc")   # constructs ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

在幕后,这会创建一个实例,然后调用新实例的__init__() 方法来初始化它.因为一切都是Python中的对象,所以类的实例也是对象.

您可能想知道的最后一件事是,就像类是构建对象的模板一样,因此可以使用模板来构建类.这些被称为元类.调用基本元类type(即,普通的新式类是其实例type).

(是的,这与type前面提到的相同,可以用来创建类,你可以调用它来创建类的原因是它是一个元类.)

要创建自己的元类,可以type像这样派生它:

class mymeta(type):
    pass
Run Code Online (Sandbox Code Playgroud)

元类是一个相当高级的Python主题,所以我不会讨论你可能会使用它们或者如何使用它们,但是它们应该清楚地表明Python在多大程度上采用了"一切都是对象"的概念.


Ign*_*ams 6

Python中的所有东西都是一个对象.甚至是类,它们是元类的实例.

  • 我不确定我的哪些字不是英文; 大概你已经知道"实例"意味着什么,而["metaclass"](http://stackoverflow.com/search?q=user%3A20862+ [python] + metaclass)只是一个实例是类的类. (4认同)
  • 请通过示例获得英语,我们将非常感谢. (2认同)

Eli*_*sky 6

术语方面,类和实例都是Python中的对象,但作为常规Python程序员,这并不重要.你可以看到Python的类和实例几乎就像C++的类和实例一样:

class MyClass:
  data = 1

mc = MyClass()
Run Code Online (Sandbox Code Playgroud)

MyClass是一mc是一个实例MyClass.


Python本质上比C++更具动态性,因此它的类也是对象.但这不是程序员通常所接触到的,所以你可以不用担心它.


Gur*_*geh 5

既然你要求“请说英语”,我会尽量以牺牲细节为代价使其变得简单。

我们首先忽略类和实例,只看对象。

Python对象包含数据函数,就像所有其他面向对象编程语言中的对象一样。附加到对象的函数称为方法

x = "hello" #now x is an object that contains the letters in "hello" as data
print x.size() #but x also has methods, for example size()
print "hello".size() #In python, unlike C++, everything is an object, so a string literal has methods.
print (5).bit_length() #as do integers (bit_length only works in 2.7+ and 3.1+, though)
Run Code Online (Sandbox Code Playgroud)

类是如何构造新对象的描述(或者配方,如果你愿意的话)根据类描述构造的对象被认为属于该类。属于一个类的一个奇特的名字是成为该类的一个实例。

现在,我之前写过,在 Python 中一切都是对象。嗯,这也适用于函数和类之类的东西。因此,关于如何创建新对象的描述本身就是一个对象。

class C: #C is a class and an object
  a = 1

x1 = C() #x1 is now an instance of C
print x1.a #and x1 will contain an object a

y = C #Since C is itself an object, it is perfectly ok to assign it to y, note the lack of ()
x2 = y() #and now we can make instances of C, using y instead.
print x2.a #x2 will also contain an object a

print C #since classes are objects, you can print them
print y #y is the same as C.
print y == C #really the same.
print y is C #exactly the same.
Run Code Online (Sandbox Code Playgroud)

这意味着您可以像对待其他事物一样对待类(和函数),例如,将它们作为参数发送给函数,函数可以使用它们来构造它从未知道存在的类的新对象。