__str__、创建子类对象,子类与父类函数名相同问题

1、__str__(self):

为内置函数,这个方法只能返回str,并且只能有self这一个参数,其他的,自行发挥。

用法:

不使用此方法时,代码会出现以下结果:

class Friend():

def __init__(self, name):

self.name = name

if __name__ == '__main__':

friend = Friend('Liang')

print friend

那么在申明一个实例对象friend并打印其信息时,python返回的是它的存储地址

<__main__ .Friend instance at 0x7ff3596c>

使用该方法的时候,会出现以下结果:

class Friend():

def __init__(self, name):

self.name = name

def __str__(self):

return "Friend : %s" % self.name

if __name__ == '__main__':

friend = Friend('Liang')

print friend

此时,打印出的内容为:

Friend name : Liang

2、子类与父类函数重载时,即子类中有一个函数名与父类相同,但是传入的参数个数不同时,在创建了子类对象之后,调用该函数,传入的参数只能与子类中参数个数一致,不能跳过子类,通过修改参数的个数与父类相同来直接调用父类。

原始代码如下所示:

class Person():  #父类

def __init__(self,name,job = None,pay = 0):

self.name = name

self.job = job

self.pay = pay

def lastName(self):

return(self.name.split()[-1])

def giveRaise(self,percent):

self.pay = int(self.pay * (1 + percent))

def __str__(self):   #此方法可通过打印对象名将其对应内容显示出来而不是打印该对象的存储地址

return '[Person: %s %s]' % (self.name,self.pay)


class Manager(Person): #子类

def giveRaise(self,percent,bonus = 0.1): #与父类函数名相同,参数个数不同的函数,且该函数为在原来的函数基础上略做修改,以便函数的维护,因为如果以后要改变工资涨幅的形式,则只需要修改父类的此函数,而不需要两个函数都要修改。

Person.giveRaise(self, percent + bonus)


if __name__ == '__main__':

bob = Person('bob smith')

sue = Person('sue jones',job = 'dev',pay = 10000)

print (bob.lastName(),bob.name,bob.pay)

sue.giveRaise(0.1)

print(sue.lastName(),sue.name,sue.pay)

print(bob) #因有__str__(self)方法,故能直接打印出bob这个对象的名字和工资,而不是打印bob对象的存储地址

print(sue)

tom = Manager('tom',job = 'mar',pay = 50000)

print(tom.name,tom.pay)

tom.giveRaise(0.1)#参数个数与子类相同

print (tom.pay)

print(tom)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 学习一下几个内容 __getattr__和__setattr__方法,把未定义的属性获取和所有的属性赋值指向通用的...
    低吟浅唱1990阅读 421评论 0 0
  • 教程地址:python进阶 - 慕课网 python函数式编程 变量可以指向函数: f = absprint(f)...
    竹口小生阅读 580评论 0 2
  • 基础1.r''表示''内部的字符串默认不转义2.'''...'''表示多行内容3. 布尔值:True、False(...
    neo已经被使用阅读 1,714评论 0 5
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 2,313评论 1 6
  • 装饰是为函数和类指定管理代码的一种方式.装饰器本身的形式是处理其他的可调用对象的可调用的对象。 函数装饰器在函数定...
    低吟浅唱1990阅读 235评论 0 0