美文网首页
__str__、创建子类对象,子类与父类函数名相同问题

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

作者: 紫米阁 | 来源:发表于2017-01-13 14:49 被阅读46次

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)

相关文章

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

    1、__str__(self): 为内置函数,这个方法只能返回str,并且只能有self这一个参数,其他的,自行发...

  • python继承二(实例)

    父类 子类一 采用父类名.方法的方式调用父类中的初始化函数" 子类二 " 使用super(子类名,self).方法...

  • c++函数的override overwrite overloa

    override (overwrite) 重写(=覆盖): 父子类间,子类覆盖父类的方法,函数名参数均相同,父类函...

  • 2020-02-17-C++ 概念

    当父类派生出一个子类并且声明一个子类的对象时候,它将会调用父类的构造函数,然后调用当前类的构造函数来创建对象。 当...

  • JavaScript继承四部曲

    四部曲:创建父类、创建子类、添加关系、修正子类原型 创建父类 创建子类 添加关系 修正子类原型

  • 父类的析构函数为虚函数

    当父类指针指向子类对象的时候,delete父类的指针,如果父类的析构函数不为虚函数,则调用父类的析构函数,子类的对...

  • c#继承中的构造方法那些事

    1)子类诞生记: 当子类对象在堆内存中被创建时,会在子类对象内部同时创建一个父类对象,这也就解释了为什么创建好子类...

  • 子父类(要点补充)

    子父类中的函数当子类出现父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容。如同父类的函数被覆盖一样。...

  • 继承的学习

    继承的深入讨论/细节问题 2.子类必须调用父类的构造器,完成父类的初始化 3.当创建子类对象时,不管使用子类的哪个...

  • 面向对象继承的方式

    创建父类 原型链继承:将父类的实例作为子类的原型 借用构造函数继承:在子类型构造函数的内部调用父类的构造函数 组合...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ntrsbttx.html