• Python对象的创建和赋值


    创建类

    类的定义以关键字class开头,之后跟着一个名字(用户定义)来标识这个类,并且以冒号结尾。类的内容以缩进(4个空格)表示,如下例的pass表示什么事情也不做。

    Python命名规则(以字母或者下划线开头,名字只能含有字母、下划线或者数字)。一般使用驼峰式命名(以大写字母开头,并且随后紧跟的任意个单词,这些单词都要以大写字母开头)。

    class MyFirstClass:
        pass

    将上述的代码保存为first_class.py文件,然后运行命令python -i first_class.py。参数-i表示在交互式解释器运行这个脚本。

    $ python -i first_class.py 
    >>> a = MyFirstClass()
    >>> print(a)
    <__main__.MyFirstClass object at 0x103fd7e80>
    >>> b = MyFirstClass()
    >>> print(b)
    <__main__.MyFirstClass object at 0x103fd7eb8>

    上述实例化了两个对象a和b。键入类的名字并紧跟一对小括号。

    添加属性

    可以通过点记法给一个实例化的对象赋予任意属性点记法形式为<object>.<attribute> = <value>来为属性赋值,这个值可以是任意的,如python内置的数据类型、其他的对象甚至是一个函数或者是另一个类。

    class Point:
        pass
    
    p1 = Point()
    p2 = Point()
    
    p1.x = 5
    p1.y = 4
    
    p2.x = 3
    p2.y = 6
    
    print(p1.x, p1.y)
    print(p2.x, p2.y)

    这段代码创建了一个没有任何数据和行为的Point 类。然后创建了这个Point类的两个实例,并且给每个实例赋予一个x坐标和一个y坐标。运行如上的代码会得到如下的结果。

    5 4 
    3 6

    让类实际做一些事情

    上面我们已经可以让一个对象带有属性,接下来是通过激发一些行为来引起这些属性的变化。在Point类里面添加了一个reset方法,该方法是将点移到原点(该方法不需要用到参数,是个很好的例子)。

    class Point:
        def reset(self):
            self.x = 0
            self.y = 0
    
    p = Point()
    
    p.x = 5
    p.y = 4
    print(p.x, p.y)
    # 5 4
    
    p.reset()
    print(p.x, p.y)
    # 0 0

    python中的方法(method)定义和函数(function)基本相同,方法可以操作对象本身和任意传入的参数。方法与函数不同的是,所有的方法都有一个必须的参数,这个参数通常被称为self,若忘记,引用该方法时会出现报错。一个方法中的self参数,是对调用这个方法的对象的一个引用,我们可以和其他对象一样访问这个对象的属性和方法。当要改变self对象的x和y属性值时,通过调用内部的reset方法实现。

    当调用p.reset(),并没有给它传入self参数,python会自动将这个对象传给了该方法

    方法只是一个函数而已,只不过恰巧出现在类中。除了可以直接调用一个对象的方法以外,我们也可以在类中调用这个函数,并且明确可以将这个对象作为self参数传给对象

    class Point:
        def reset(self):
            self.x = 0
            self.y = 0
    
    p = Point()
    Point.reset(p)
    print(p.x, p.y)
    # 0 0

    如何传递多个参数?假设在Point类中,添加新的方法,可以将点移动到任意位置,而不只是原点。另外可以接受另一个Point对象作为输入,然后返回这两个对象之间的距离。

    import math
    
    class Point:
        def move(self, x, y):   # 接受x和y两个参数,并且给self对象赋值
            self.x = x
            self.y = y
    
        def reset(self):  # 移动到特定位置的move
            self.move(0, 0)
    
    # 接受另一个Point对象作为输入,返回距离 
        def calculate_distance(self, other_point):  
            return math.sqrt(
                    (self.x - other_point.x) ** 2 +
                    (self.y - other_point.y) ** 2)
    
    # 如何使用它
    point1 = Point()
    point2 = Point()
    
    point1.reset()
    point2.move(5, 0)
    print(point2.calculate_distance(point1))
    #5.0
    
    #assert是一个简单的测试工具,如果后面的语句是False(0,空或者None),这个程序会异常退出
    assert(point2.calculate_distance(point1) == 
           point1.calculate_distance(point2))
    
    point1.move(3, 4)
    print(point1.calculate_distance(point2))
    #4.472135955
    print(point1.calculate_distance(point1))
    #0.0 

    参考:

    1、《Python3 面向对象编程》 [加]Dusty Philips 著

  • 相关阅读:
    python基础(set)补充
    运算
    初识正则表达式
    xml中俩种解析方式
    Android Studio 调用夜神模拟器
    Android Studio 配置虚拟设备的镜像文件的存放路径
    Allegro PCB Design GXL (legacy) 使用slide推挤走线,走线的宽度就发生改变的原因
    OrCAD Capture CIS 16.6 在原理图页面内放置图片
    OrCAD Capture CIS 16.6 修改原理图的页面大小
    ESD选型指南
  • 原文地址:https://www.cnblogs.com/anovana/p/8124417.html
Copyright © 2020-2023  润新知