python:子类与父类

# -*- coding: UTF-8 -*-

#创建一个空类
class Person():
	pass

someone =Person()

#加入初始化方法
class Person():
	def __init__(self):#第一个参数必须为self
		pass

#为初始化方法添加额外参数
class Person():
	def __init__(self,name):#初始化时需要加入参数
		self.name = name
		#在函数内部,用self.name可以访问name属性,在外部就需要用通过实例化的对象名来访问,如hunter.name
hunter = Person('Elner Fudd')
#step1:查看Person类的定义
#step2:在内存中实例化(创建)一个新的对象
#step3:参数传入
#step4:name的值传送给对象
#step5:返回新的对象
#step6:将对象与hunter关联起来
print hunter.name

#类的继承
class Car():
	def exclaim(self):#self的意义,之后再写
		print('i am a car')
class Yugo(Car):
	pass
#Yugo是Car的子类,继承Car的方法和功能
c = Car()
y = Yugo()
c.exclaim()
y.exclaim()

#覆盖原方法
class Car():
	def __init__(self,name):
		self.name = name
	def exclaim(self):
		print('i am ' + self.name)
		
class Yogu():
	def __init__(self,name):
		self.name = name + '!'
	def exclaim(self):
		print('i am ' + self.name)
class Motor():
	def __init__(self,name):
		self.name = name + '?'
	def exclaim(self):
		print('i am ' + self.name)
		
c = Car('Tom')
y = Yogu('Jerry')
m = Motor('Adams')

print(c.name)
print(y.name)
print(m.name)

c.exclaim()
y.exclaim()
m.exclaim()

#为 子类 添加新方法

class Car():
	def __init__(self,name):
		self.name = name

class Yugo(Car):
	def __init__(self,name):
		self.name = name + '!'
	def need_a_push(self,who):
		print ('i need a push from' + who)
		
y = Yugo('Daddy')

print(y.name)
y.need_a_push('Tom')

#子类的方法,父类无法访问
#c = Car('name')
#c.need_a_push('Tom')
#'''Traceback (most recent call last):
#  File "/tmp/963057337/main.py", line 89, in <module>
#    c.need_a_push('Tom')
#AttributeError: Car instance has no attribute 'need_a_push''''

#使用super()从父辈哪儿获得帮助
class Parent():
	def __init__(self,name):
		self.name = name
	def exclaim(self):
		print (self.name)
class Kid(Parent):
	def __init__(self,name,gender):
#		super().__init__(name)#将self自动传递给父类,因此只用传递其余参数
		self.name = name
		self.gender = gender
	def exclaim(self,who):
		super().exclaim()
		#同理,因为父类的exclaim方法只有self参数,所以不需要再传入参数
		#但是要保证self.name属性存在
		#相当于 def exclaim(self):
		#		   print(self.name)
		print('i am ' + who)

k = Kid('Alice','Famale')

print(k.gender)

k.exclaim('admas')


**子类继承父类方法的几种形式
class A:  
    def method(self, arg):    
         return
  
class B(A):  
    def method(self, arg):  
#        A.method(self,arg)                #1   
#        super(B, self).method(arg)        #2   
#        super().method(arg)               #3 

#python3 使用方法3取代了较复杂的方法2
举例来说:
class A():
    def __init__(self,name,age):
        self.name =name
        self.age = age
    def get_name(self):
        print(self.name)
    def get_age(self):
        print(self.age)

class B(A):
    def __init__(self,name,age):
        A.__init__(self,name,age) #1
    def get_name(self):
        super(B,self).get_name() #2
    def get_age(self):
        super().get_age()

b = B('Alice',55)

print(b.name)
print(b.age)

b.get_name()
b.get_age()

 

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值