创建一个以姓名和年龄为初始化方法的参数的类,还要允许以出生年份创建实例。

import datetime
class Person:
    def __init__ (self,name,age):
        self.name=name
        self.age=age
    @classmethod
    def by_birth(cls,name, birth_year):
        this_year=datetime.date.today().year
        age=this_year-birth_year
        return cls (name,age)     #6
    def get_info(self):
        return "{0}'s age is {1}".format(self.name,str(self.age))
newton=Person('Newton',26)   #7
print(newton.get_info())
hertz=Person.by_birth('hertz',1857)    #8
print(hertz.get_info())

输出:

Newton's age is 26
hertz's age is 163

 

在代码中所定义的类person,根据初始化方法的参数,使用7创建实例。但是如果使用出生年份创建实例,则7不再支持,因为初始化age代表年龄。要解决这个问题,又不破坏初始化方法,就可以使用类方法装饰器,定义by_birth方法。在这个方法中,计算了age之后,再以6创建实例对象,8直接通过类名调用方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值