• 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 也会发生相应的改变。 

    结束。

  • 相关阅读:
    Java Class的field如果以小写t开头
    ACM集训日志——day1——15.7.8
    分金币 Uva 11300
    RMQ小结
    Poj 水题
    Codeforces Round #278 (Div. 2)
    poj 3685
    poj 3579
    vConsole
    js更换自定义鼠标指针图片
  • 原文地址:https://www.cnblogs.com/liusingbon/p/13226433.html
Copyright © 2020-2023  润新知