# -*- 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()