Python类和对象_自定义类与属性
类和对象,主要是学习【面向对象编程】了,这种编程方法中,用户可以自定义类型来同时对代码和数据进行整理。
一,用户自定义类型
Python 有很多的内置类型,现在我们来自定义一个新的类型。
比如,创建一个叫 Point 的类,用于表示一个二维空间中的点。
数学符号上对点的表述一般是一个括号内有两个坐标,坐标用逗号分隔开。比如,(0,0)就表示为原点,(x,y)就表示了该点从原点向右偏移 x,向上偏移 y。
事实上,我们可以用好几种方法来在 Python 中表示一个点:
• 可以把坐标存储成两个单独的值,x 和 y。
• 可以把坐标存储成列表或者元组的元素。
• 可以创建一个新的类型,用对象来表示点。
1.用户自定义的类型也被叫做一个类,如下所示:
>>> class Point:
... """Represents a point in 2-D space."""
...
头部代码的意思是表示新建的类名字叫 Point。然后类的体内有一个文档字符串,解释类的用途。在类的定义内部可以定义各种变量和方法。
声明一个名为 Point 的类,就可以创建该类的一个对象:
>>> Point
<class '__main__.Point'>
因为 Point 是在顶层位置定义的,所以全名就是__main__.Point。
2.类的对象就像是一个创建对象的工厂。创建一个 Point,就可以像调用函数一样调用 Point。
>>> blank = Point()
>>> blank
<__main__.Point object at 0x10abe71d0>
返回值是到一个 Point 对象的引用,刚刚赋值为空白了。
创建一个新的对象也叫做实例化,这个对象就是类的一个实例。
用 Print 输出一个实例的时候,Python 会告诉你该实例所属的类,以及在内存中存储的位置 (前缀为0x 意味十六进制)
每一个对象都是某一个类的一个实例,所以【对象】和【实例】可以互换来使用。谈论用户自定义类型的时候,使用【实例】这个词更贴切一点。
二,属性
1.用点号可以给实例进行赋值:
>>> blank.x = 3.0
>>> blank.y = 4.0
这一语法形式就和从模块中选取变量的语法是相似的,比如 math.pi 或者 string.whitespace。
然而在本例中,我们用点号实现的,是对一个对象中某些特定名称的元素进行赋值,这些元素也叫做属性。
用于展示一个类及其属性的状态图也叫做类图,下面的图表展示了上面这些赋值的结果:
变量 blank 指代的是一个 Point 对象,该对象包含两个属性x和y,每个属性都指代了一个浮点数。
读取属性值可以用如下这样的语法:
>>> blank.y
3.0
>>> y = blank.y
>>> y
3.0
这里的表达式 blank.y 的意思是,到 blank 所指代的对象中,读取 y 的值。
在这个例子中,我们把这个值赋值给一个名为 y 的变量。这里的变量 y 和类的属性y 并不冲突。
2.另外,点号可以随意在任意表达式中使用,比如:
>>> blank.x = 3.0
>>> blank.y = 4.0
>>> '(%g, %g)' % (blank.x, blank.y)
'(3, 4)'
>>> import math
>>> distance = math.sqrt(blank.x**2 + blank.y**2)
>>> distance
5.0
3.我们还可以把实例作为一个参数来使用,比如:
>>> def print_point(p):
... print('(%g, %g)' % (p.x, p.y))
...
>>> print_point(blank)
(3, 4)
这个例子中,print_point 这个函数就接收了一个点作为参数,然后显示点的平面数值位置。
在函数内部,p 是blank 的一个别名;所以,如果函数内部对 p 进行了修改,blank 也会发生相应的改变。
结束。