类和对象python
A. python中类对象的理解总结
9.3.2. 类对象
类对象支持两种操作:属性引用和实例化。
属性引用 使用和 Python 中所有的属性引用一样的标准语法:obj.name。类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
那么 MyClass.i 和 MyClass.f 是有效的属性引用,分别返回一个整数和一个方法对象。也可以对类属性赋值,你可以通过给 MyClass.i 赋值来修改它。 __doc__ 也是一个有效的属性,返回类的文档字符串:"A simple example class"。
类的 实例化 使用函数符号。只要将类对象看作是一个返回新的类实例的无参数函数即可。例如(假设沿用前面的类):
x = MyClass()
以上创建了一个新的类 实例 并将该对象赋给局部变量 x。
这个实例化操作(“调用”一个类对象)来创建一个空的对象。很多类都倾向于将对象创建为有初始状态的。因此类可能会定义一个名为 __init__() 的特殊方法,像下面这样:
def __init__(self):
self.data = []
类定义了 __init__() 方法的话,类的实例化操作会自动为新创建的类实例调用 __init__() 方法。所以在下例中,可以这样创建一个新的实例:
x = MyClass()
当然,出于弹性的需要,__init__() 方法可以有参数。事实上,参数通过 __init__() 传递到类的实例化操作上。例如,
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
B. python中类对象和方法的区别是什么
python使用对象模型来存储数据,也就是说构造任何类型的值都是一个对象。所有的python对象都拥有三个特性:身份id,类型和值。
身份id:唯一的身份标识,可以使用内建函数id()来得到,这个值可以被认为是该对象的内存地址。
类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则,可以用内建函数type()查看
python对象的类型,也可以用isinstance(),在python中类型也是对象。
值:对象表示的数据项。布尔逻辑运算符包括and、or、not,对象值的比较除了一些常见的运算符(< > <= >= == !=)之外,还可以
使用cmp()内建函数,如果是用户自定义对象,cmp()对调用该类的特殊方法__cmp__()。对于字符串来说,内建函数str(obj)返回对象适
合可读性好的字符串表示,而另一个内建函数repr(obj)返回一个对象的字符串表示,通常情况下obj == eval(repr(obj))这个等式是成立
的。可以这么说,repr()的输出对python比较友好,str()的输出对人比较友好。方法是在类中定义的函数。
更多技术请关注Python视频教程。
C. Python中类与对象的其他说明
9.4. 一些说明
数据属性会覆盖同名的方法属性。为了避免意外的名称冲突,这在大型程序中是极难发现的 Bug,使用一些约定来减少冲突的机会是明智的。可能的约定包括:大写方法名称的首字母,使用一个唯一的小字符串(也许只是一个下划线)作为数据属性名称的前缀,或者方法使用动词而数据属性使用名词。
数据属性可以被方法引用,也可以由一个对象的普通用户(客户)使用。换句话说,类不能用来实现纯净的数据类型。事实上,Python 中不可能强制隐藏数据——一切基于约定(如果需要,使用 C 编写的 Python 实现可以完全隐藏实现细节并控制对象的访问。这可以用来通过 C 语言扩展 Python)。
客户应该谨慎的使用数据属性——客户可能通过践踏他们的数据属性而使那些由方法维护的常量变得混乱。注意:只要能避免冲突,客户可以向一个实例对象添加他们自己的数据属性,而不会影响方法的正确性——再次强调,命名约定可以避免很多麻烦。
从方法内部引用数据属性(或其他方法)并没有快捷方式。我觉得这实际上增加了方法的可读性:当浏览一个方法时,在局部变量和实例变量之间不会出现令人费解的情况。
一般,方法的第一个参数被命名为 self。这仅仅是一个约定:对 Python 而言,名称 self 绝对没有任何特殊含义。(但是请注意:如果不遵循这个约定,对其他的 Python 程序员而言你的代码可读性就会变差,而且有些 类查看器 程序也可能是遵循此约定编写的。)
类属性的任何函数对象都为那个类的实例定义了一个方法。函数定义代码不一定非得定义在类中:也可以将一个函数对象赋值给类中的一个局部变量。例如:
# Function defined outside the class
def f1(self, x, y):
return min(x, x+y)
class C:
f = f1
def g(self):
return 'hello world'
h = g
现在 f, g 和 h 都是类 C 的属性,引用的都是函数对象,因此它们都是 C 实例的方法-- h 严格等于 g 。要注意的是这种习惯通常只会迷惑程序的读者。
通过 self 参数的方法属性,方法可以调用其它的方法:
class Bag:
def __init__(self):
self.data = []
def add(self, x):
self.data.append(x)
def addtwice(self, x):
self.add(x)
self.add(x)
方法可以像引用普通的函数那样引用全局命名。与方法关联的全局作用域是包含类定义的模块。(类本身永远不会作为全局作用域使用。)尽管很少有好的理由在方法 中使用全局数据,全局作用域却有很多合法的用途:其一是方法可以调用导入全局作用域的函数和方法,也可以调用定义在其中的类和函数。通常,包含此方法的类也会定义在这个全局作用域,在下一节我们会了解为何一个方法要引用自己的类。
每个值都是一个对象,因此每个值都有一个 类( class ) (也称为它的 类型( type ) ),它存储为 object.__class__ 。
D. 如何理解python的类与对象
问的太笼统了,不知道答的对不对. 看下面的图
左边元类,中间类,右边实例
其实记住的只是一点:python里一切都是对象,实例是对象,类是对象,元类也是对象.
这里题主说的类和对象其实是包含和被包含的关系了.
那么Python里的类和其他的对象有什么区别?
实例是对象,因为创建实例的是类.类是对象,创建类的是什么呢?Python给的答案就是元类.你可以通过type()函数来查看它的元类.(type(type)得到的是它自己)
其实这个类和其他对象一样,所以我们就不惊讶它为什么有类方法,类变量了..
E. Python的类和对象
<bound method A.b of <__main__.A object at 0x000001BC9BDD8B00>>
只是在运行时显示的信息, 通常使用__str__魔法函数也会显示类似的字符串
真正的运行一个py文件时, a.b并不会有任何效果
F. python中"类"和"对象"的区别
类就是一类事物,对象是这类事物中的一个具体事物。
就像人类的一个成员是一个人。
G. python中类与对象补充怎么理解的
9.7. 补充
有时类似于 Pascal 中“记录(record)”或 C 中“结构(struct)”的数据类型很有用,它将一组已命名的数据项绑定在一起。一个空的类定义可以很好地实现它:
class Employee:
pass
john = Employee() # Create an empty employee record
# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000
某一段 Python 代码需要一个特殊的抽象数据结构的话,通常可以传入一个类,事实上这模仿了该类的方法。例如,如果你有一个用于从文件对象中格式化数据的函数,你可以定义一个带有 read() 和 readline() 方法的类,以此从字符串缓冲读取数据,然后将该类的对象作为参数传入前述的函数。
实例方法对象也有属性:m.__self__ 是一个实例方法所属的对象,而 m.__func__ 是这个方法对应的函数对象。