• Python--对象


    一、对象表示形式
    Python 提供了两种获取对象的字符串表示形式的标准方式。
    • repr() : 以便于开发者理解的方式返回对象的字符串表示形式。
    • str() : 以便于用户理解的方式返回对象的字符串表示形式。
     
    二、classmethod 与 staticmethod
    这两个是python内置提供的装饰器, 都是在类 class 定义中使用的。可以通过类直接调用,而不是通过实例。
    classmethod 装饰器是将类本身作为第一个参数.
    staticmethod 装饰器也会改变方法的调用方式, 它就是一个普通的函数,
    classmethod 与 staticmethod 的区别就是 classmethod 会把类本身作为第一个参数传入, 其他都一样了.
    看看例子:
    >>> class Demo:
    ... @classmethod
    ... def klassmeth(*args):
    ...     return args
    ... @staticmethod
    ... def statmeth(*args):
    ...     return args
    ...
    >>> Demo.klassmeth()
    (<class '__main__.Demo'>,)
    >>> Demo.klassmeth('spam')
    (<class '__main__.Demo'>, 'spam')
    >>> Demo.statmeth()
    ()
    >>> Demo.statmeth('spam')
    ('spam',)
    三、私有属性和"受保护的"属性
    在python中, 有一个简单的机制来处理私有属性:把使用一个下划线前缀标记的属性称为"受保护的"属性
    只要知道私有属性的机制, 任何人都能直接读取和改写私有属性. 因此很多python程序员严格规定: 遵守使用一个下划线标记对象的私有属性 . Python 解释器不会对使用单个下划线的属性名做特殊处理, 由程序员自行控制。
    不要使用双下划线:
    class A:
        def __init__(self):
            self._x = 1
    
    a = A()
    print(a._x) # AttributeError: 'A' object has no attribute '__x'
    print(a.__dict__)
    报错说明:如果属性以 __name 的 两个下划线为前缀命名的实例属性, python会把它名称前面加一个下划线加类名, 再放入 __dict__ 中, 以 __name 为例, 就会变成 _A__name .
     
    四、格式化输出
    内置的 format() 函数和 str.format() 方法会调用相应的__format__(format_spec) 方法。
    • format(my_obj, format_spec) 的第二个参数即格式说明符。
    • str.format() 方法的格式字符串,替换字符串中{} 里的部分
    1.使用"+"实现:
    print "User:" + user_name + " has completed Action:" + action_name + " at Time:" + current_time
     
    2.换用 % 来实现:
    print "User:%s has completed Action:%s at Time:%s" % (user_name, action_name, current_time)
     
    3.使用 str.format() 来实现:
    print "User:{} has completed Action:{} at Time:{}".format(user_name, action_name, current_time)
     
    使用位置索引
    print "User:{0} has completed Action:{1} at Time:{2}".format(user_name, action_name, current_time)
    使用关键字索引
    print "Hello, {boy} and {girl}!".format(boy="John", girl="Mary")
    注意:如果字符串本身含有花括号,则需要将其重复两次来转义,只需将它改写成 {{}} 即可。
        还可以使用 *args 和 **kwargs 的形式传参。
     
    还可以用来访问参数的属性或元素
    print "My car is {0.color}.".format(black_car) 
    print "The first student is {student[0]}.".format(student=stu_list)
    print "John is {d[john]} years old.".format(d=age_dict)
     
    format_spec格式说明符
    在替换字段中,格式说明符前面有一个冒号 : :
    {字段名!转换字段:格式说明符}
    其中格式说明符本身可以是一个字段名,比如:
    print('{0:{1}}'.format(3.14159, '.4f')) #3.1416
     
    标准格式说明符的格式:
    [[fill]align][sign][#][0][width][grouping_option][.precision][type]
    中文形式可以写作:
    [[填充]对齐方式][正负号][#][0][宽度][分组选项][.精度][类型码]
     
    1.填充:
    只能是一个字符
    不指定默认用空格填充
    如果指定填充字符,则必须要同时指定对齐方式
     
    2.对齐方式的取值:
    <:左对齐
    >:右对齐
    ^:居中
    =:在正负号(如果有的话)和数字之间填充,该对齐选项仅对数字类型有效。
    它可以输出类似 +0000120 这样的字符串。
    注意:如果不给定最小宽度 width,对齐方式毫无意义。
     
    3.正负号(选项仅对数字类型生效)
    + 正数前面添加正号,负数前面添加负号
    - 仅在负数前面添加负号(默认行为)
    空格:正数前面需要添加一个空格,以便与负数对齐
     
    print('{:哈=+8.2f}'.format(-3.14159)) #-哈哈哈3.14
     
    4.最小宽度 width
    如果不指定,最小字段宽度由内容决定,与内容相等
    如果最小宽度前面有一个前导 0,意味着用 0 填充
     
    5.精度
    精度指定了小数点后面要展示多少位小数
    对于非数字类型,精度指定了最大字段宽度
    整数类型不能指定精度
     
    6.类型码
    字符串类型(用s表示)
    整数类型 (b 二进制;c 字符;d 十进制整数;o 八进制数;x 十六进制数a 到 f 小写;X 十六进制数,A 到 F 大写)
    浮点数类型(e 科学记数法;f 定点记法默认精度为 6;% 百分号类型)
     

  • 相关阅读:
    简单的几句接口调用,完美完成缩短网站
    nodejs语言实现验证码生成功能
    人工智能:文本相似度分析
    SolrCloud 5.2.1 installation and configuration
    借鉴DP思想: HouseRobberIII
    有意思的数学题:Trapping Rain Water
    API认证方法一览
    FE: Responsive Web Design Overview
    FE: Sass and Bootstrap 3 with Sass
    假期小记:14年寒假二三四事(儿)
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14090097.html
Copyright © 2020-2023  润新知