Python 中类的特殊方法

Python 中类的特殊方法

当我们在Python中定义一个类并尝试使用print语句打印它的一个实例时,我们将得到一个字符串,其中包含类名和对象实例的引用,即对象的内存地址。实例或对象没有默认的字符串功能实现。显示此行为的代码片段如下:

class 小汽车类:
    质量标准 = "国家质量标准"
    
    def __init__(, 颜色, 品牌):.颜色 = 颜色 
        我.品牌 = 品牌
        
    def 打印_颜色():
        print(f"小汽车的颜色是:{.颜色}")
        
    def 打印_品牌():
         print(f"小汽车的品牌是:{.品牌}")
        
    @classmethod 
    def 打印_质量标准(我之类):
        print(f"我之质量标准:{我之类.质量标准}")
        print(f"我之类名字是:{我之类.__name__}")
        
    @staticmethod 
    def 打印_你好():
        print("哇哦,这是一个来自于静态方法的问候")
        

if __name__ == "__main__":
    小汽车  = 小汽车类("白色", "国威")
    print(小汽车)

输出如下:

<__main__.小汽车类 object at 0x000001F4D0B509B0>

为了从print语句中获得有意义的东西,我们需要实现一个特殊的__str__方法,该方法将返回一个包含实例信息的字符串,并且可以根据需要进行自定义。下面是一个代码片段,显示了带有__str__方法的小汽车类类:

class 小汽车类:
    质量标准 = "国家质量标准"
    
    def __init__(, 颜色, 品牌):.颜色 = 颜色 
        我.品牌 = 品牌
        
    def 打印_颜色():
        print(f"小汽车的颜色是:{.颜色}")
        
    def 打印_品牌():
         print(f"小汽车的品牌是:{.品牌}")
        
    def __str__():
        return f"我是一个小汽车,依呀依呀哟。我的颜色是{.颜色},我的品牌是{.品牌},我执行的质量标准是{.质量标准}。"
        
    @classmethod 
    def 打印_质量标准(我之类):
        print(f"我之质量标准:{我之类.质量标准}")
        print(f"我之类名字是:{我之类.__name__}")
        
    @staticmethod 
    def 打印_你好():
        print("哇哦,这是一个来自于静态方法的问候")
        

if __name__ == "__main__":
    小汽车  = 小汽车类("白色", "国威")
    print(小汽车)

这次的输出结果是:

我是一个小汽车,依呀依呀哟。我的颜色是白色,我的品牌是国威,我执行的质量标准是国家质量标准。

通过正确的__str__实现,我们可以使用print语句,而无需实现to_string()等特殊函数。这是Python控制字符串转换的方法。出于类似原因使用的另一种流行方法是__repr__,Python解释器使用它来检查对象。__repr__方法更多地用于调试目的。

这些方法(以及其他一些方法)被称为特殊方法或dunder,因为它们总是以双下划线开头和结尾。普通方法不应使用此约定。这些方法在一些文献中也被称为魔术方法,但这不是官方术语。有几十种特殊方法可用于类的实现。Python 3官方文档中提供了一个全面的特殊方法列表,可以前往查看。

<结束>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dowhileprogramming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值