Python 有没有一种方法可以重写_格式_方法

Python 有没有一种方法可以重写_格式_方法,python,string,Python,String,我们知道: str.format('{:+>10}', 'sometext') 将返回: '++sometext' 或: “{:+>10}”。格式“sometext”将返回“++sometext” 我的问题是,是否存在覆盖类实例的格式化方法的方法。。。。我试过这个: class A: def __format__(self, spec): return spec.format(self) 然后实例化它: a = A() a.__format__('{:+>

我们知道:

str.format('{:+>10}', 'sometext')
将返回:

'++sometext'
或: “{:+>10}”。格式“sometext”将返回“++sometext” 我的问题是,是否存在覆盖类实例的格式化方法的方法。。。。我试过这个:

class A:
    def __format__(self, spec):
        return spec.format(self)
然后实例化它:

a = A()
a.__format__('{:+>20}')
返回'+>20'这怎么会发生。。。
感谢您,您可以创建这样一个类,该类将初始int值作为长度。我在Python3中进行了测试,效果很好

class Padded:
    def __init__(self, length: int=10, pad='+'):
        self.value = '{{:{}>{}}}'.format(pad, length)
    def format(self, value):
        return self.value.__format__(value)

a=Padded(20)
print(a.__format__('Sometext')) 
#++++++++++++Sometext

您可以创建这样一个类,它接受初始int值作为长度。我在Python3中进行了测试,效果很好

class Padded:
    def __init__(self, length: int=10, pad='+'):
        self.value = '{{:{}>{}}}'.format(pad, length)
    def format(self, value):
        return self.value.__format__(value)

a=Padded(20)
print(a.__format__('Sometext')) 
#++++++++++++Sometext
在def__format__self中,spec:,spec是格式字符串本身。如果要使用该规范格式化类,则需要以某种方式将其指定为类实例内容的格式,例如:

class Value:

    def __init__(self,value):
        self.value = value

    def __format__(self,fmt):                # fmt='03' from below.
        return f'Value({self.value:{fmt}})'  # f'Value({self.value:03})' is evaluated.

v = Value(5)
print(f'{v:03}')         # Python 3.6+
print('{:04}'.format(v)) # Python <3.6
在def__format__self中,spec:,spec是格式字符串本身。如果要使用该规范格式化类,则需要以某种方式将其指定为类实例内容的格式,例如:

class Value:

    def __init__(self,value):
        self.value = value

    def __format__(self,fmt):                # fmt='03' from below.
        return f'Value({self.value:{fmt}})'  # f'Value({self.value:03})' is evaluated.

v = Value(5)
print(f'{v:03}')         # Python 3.6+
print('{:04}'.format(v)) # Python <3.6

不清楚您想问什么,或者希望_格式_方法返回什么__format_u是一个普通的方法,你可以像其他方法一样重写,你已经这样做了。。。我们如何利用它来格式化我们想要的字符串还不清楚你想问什么,或者你想让格式化方法返回什么__format_u是一个普通的方法,你可以像其他方法一样重写,你已经这样做了。。。我们如何利用它来格式化我们想要的字符串您还没有按照OP的要求演示重写_格式。您刚刚为类提供了一个名为format的方法。uuuu format_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。您重写它,它被f字符串或.format间接调用。请看我的答案。您没有按照OP的要求演示重写格式。您刚刚为类提供了一个名为format的方法。uuuu format_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。您重写它,它被f字符串或.format间接调用。请看我的答案。是否有一种方法可以直接格式化到self,我尝试了,但它返回最大递归,我尝试调用super,但它返回不可识别/不受支持的格式字符串,或者这可能是python的约定,self有自己的标准格式。我的意思是,像+++一样,有没有一种方法可以直接格式化到self,我尝试了,但它返回了最大的递归,我尝试调用super,但它返回了不可识别/不支持的格式字符串,或者这可能是python的约定,self有自己的标准格式。我是说像+++