python对象是啥概念?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python对象是啥概念?相关的知识,希望对你有一定的参考价值。

参考技术A 所说所有的变量都是对象。 对象在python里,其实是一个指针,指向一个数据结构,数据结构里有属性,有方法。\\x0d\\x0a \\x0d\\x0a对象通常就是指变量。从面向对象OO的概念来讲,对象是类的一个实例。在python里很简单,对象就是变量。\\x0d\\x0a \\x0d\\x0aclass A:\\x0d\\x0a myname="class a"\\x0d\\x0a上面就是一个类。不是对象\\x0d\\x0aa=A()\\x0d\\x0a这里变量a就是一个对象。\\x0d\\x0a它有一个属性(类属性),myname,你可以显示出来\\x0d\\x0aprint a.myname\\x0d\\x0a \\x0d\\x0a所以,你看到一个变量后面跟点一个小数点。那么小数点后面就是它的属性或者是方法。带括号的方法。不带就是属性。

python 类中的对象声明是啥意思,我应该使用它吗? [复制]

【中文标题】python 类中的对象声明是啥意思,我应该使用它吗? [复制]【英文标题】:What does the object declaration mean in a python class, and should I use it? [duplicate]python 类中的对象声明是什么意思,我应该使用它吗? [复制] 【发布时间】:2012-11-05 15:17:49 【问题描述】:

示例 #1:

class Person(object):
    pass

示例 #2:

class Person:
    pass

对象声明有什么作用?你应该使用它吗?我有一堆程序和他们两个,不知道它有什么不同。如果有人可以解释这个概念,请。

【问题讨论】:

【参考方案1】:

在 Python2 中,将 object 声明为基类会使类成为 new-style class。否则,它是一个“经典”类。不同之处在于

属性仅适用于新型类

新式类有mro method

新式类有很多经典类所缺乏的属性

In [288]: class Foo: pass
In [289]: dir(Foo) 
Out[289]: ['__doc__', '__module__']

In [290]: class Bar(object): pass
In [291]: dir(Bar) 
Out[291]:  ['__class__',  '__delattr__',     '__dict__',  '__doc__',  '__format__',  '__getattribute__',     '__hash__',  '__init__',  '__module__',  '__new__',  '__reduce__',     '__reduce_ex__',  '__repr__',  '__setattr__',  '__sizeof__',     '__str__',  '__subclasshook__',  '__weakref__']

经典类保留在 Python2 中只是为了向后兼容。您定义的所有自定义类都应该是新样式的。

在 Python3 中,所有的类都是新式的,所以不需要在那里显式声明。

【讨论】:

+1 !顺便说一句:AFAIK 使用新型类没有缺点,所以我觉得你应该一直使用它们,无一例外。顾名思义,旧式类的存在只是为了向后兼容(这就是它们最终在 Python 3.0 中被删除的原因)。 感谢您提供不止一个旧的,一个新的。我很感激人们花时间帮助他人学习。 我能想到老式类的一个偶然优势:可以在实例上查找特殊方法。例如。 a = oldstyle(); a.__add__ = lambda *args: 'changed' 将起作用,但与 newstyle 对象的等效项将不起作用。也许有一两次我希望这能在不创建新类的情况下工作,但仅此而已,而且主要是我的结构需要重新思考的迹象。【参考方案2】:

在 Python 2 中,object 使其成为“新型类”。这意味着什么的细节并不太重要,但最重要的是您应该始终使用它,否则有些事情可能无法正常工作。

在 Python 3 中,一切都是新式类,所以你不需要在那里使用object

【讨论】:

以上是关于python对象是啥概念?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 与 Python 元类的类比是啥?

面向对象思想是啥

python中JSON对象的类型是啥?

Python 中的元类是啥?

DFMEA研究的对象是啥?

“针对接口而不是对象的代码”的 Python 版本是啥?