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对象是啥概念?的主要内容,如果未能解决你的问题,请参考以下文章