__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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容

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