• think python 第15章 classes and objects


    15.1user-defined types

    A user-defined type is also called a class. A class definition looks like this:

     class Point(object):
        '''Represents a point in 2-D space'''

    类头表明新的类是point,它也是一种object。object一种内置的数据类型。

    the body 是docstring(文档字符串),解释了point类的作用

    定义了一个point类,也就创建了一个类对象(class object)

    >>> class Point(object):
        '''Represents a point in 2-D space'''
    
        
    >>> print (Point)
    <class '__main__.Point'>
    >>> blank = Point()
    >>> print(blank)
    <__main__.Point object at 0x0000023E17082160>
    >>> #返回值是一个point对象的引用,我们把它赋给blank变量。创建一个新的对象叫实例化,对象是类的一个实例

    15.2attributes

    >>> class Point(object):
        '''Represents a point in 2-D space'''
    
        
    >>> blank = Point()
    >>> blank.x = 3.0
    >>> blank.y = 4.0
    >>> print(blank.y)
    4.0
    >>> x = blank.x
    >>> print(x)
    3.0
    >>> print('(%g,%g)' % (blank.x,blank.y))
    (3,4)
    >>> import math
    >>> distance = math.sqrt(blank.x ** 2 + blank.y ** 2)
    >>> print(distance)
    5.0

    15.3rectangles(矩形)

    简单定义一个矩形(假设长为4,宽3,左下角坐标为(0,0))

    >>> class rectangles(object):
        '''长4宽3,左下角坐标(0,0)'''
    
        
    >>> class point(object):
        '''坐标(0,0)'''
    
        
    >>> box = rectangles()
    >>> box.width = 3.0
    >>> box.height = 4.0
    >>> box.corner = point()
    >>> box.corner.x = 0.0
    >>> box.corner.y = 0.0

    15.4instances as rerturn values

    矩形也可以用中心点跟对象线距离来表示

     15.5objects are mutable

    15.6copying

    官网认为copy.copy()是二者包含同样的数据,但是它们不是同一个点。

    >>> class Point(object):
        '''a point'''
    
        
    >>> def print_point(p):
        print('(%g,%g)' % (p.x,p.y))
    
        
    >>> p1 = Point()
    >>> p1.x = 3
    >>> p1.y = 4
    >>> print_point(p1)
    (3,4)
    >>> import copy
    >>> p2 = copy.copy(p1)
    >>> print_point(p2)
    (3,4)
    >>> p1 is p2
    False
    >>> p1 == p2
    False

    但是我在程序上运行:

    >>> p1 = (3,4)
    >>> import copy
    >>> p2 = copy.copy(p1)
    >>> p2
    (3, 4)
    >>> p1 is p2
    True
    >>> p1 == p2
    True

    is操作符表明p1跟p2是同一个对象?浅拷贝拷贝了对象和它包含的引用,但是不包括嵌套的对象。

    查询了python3.6.3的官方文档,我们可以得知:

    浅复制和深度复制的区别只与复合对象(包含其他对象的对象,如列表或类实例)有关:

    一个浅拷贝构造了一个新的复合对象,然后(尽可能地)将引用插入到原来的对象中。

    深度复制构造了了一个新的复合对象,然后递归地将副本插入到原来的对象中

    deepcopy不仅赋值对象本身,也复制对象指向的东西及其指向的东西等等。

    15.7debugging

    如果访问一个不存在的属性,将会得到AttributeError异常。如果不能确定对象的类型是什么,可以使用type()

    如果不能确定对象是否拥有一个属性,可以使用内置函数hassttr(object,'attribution')

  • 相关阅读:
    php实现题目抢答、商品秒杀等类型的需求
    php实现批量修改文件名称
    php微信支付问题之 cURL error 60: SSL certificate: unable to get local issuer certificate
    laravel5.2之logout注销账号无效
    分布式版本控制git常见问题之gitignore冲突(精简版)
    laravel实现多数据库连接配置
    laravel实现excel表格导出
    js实现超出一定字数隐藏并用省略号"..."代替,点击后又可进行展开和收起,
    你会python不?当你听到这个问题要谨慎回答!!!
    DirectX 入门1-初识DirectX Tool Kit
  • 原文地址:https://www.cnblogs.com/Kingwjk/p/7944533.html
Copyright © 2020-2023  润新知