python
上回我们提到对象这码子事,可能有人不以为然,觉得这跟列表、字典什么的没啥本质区别。
这么想没错,毕竟列表、字典都是对象(“对象类”的一个实际的“对象”(实例))。
but,有人以为这个名词没必要出现,就错了。
因为没了“对象”这个概念,不止你退回了单身狗状态,你爹的东西你也继承不了了。
那什么叫继承呢?
接着用加菲猫的例子——不过这回,说的是一个品种(类)了。
加菲猫:
一种“喵喵”叫哺乳动物。平均寿命14岁,爱吃鱼,爱喝牛奶。
肥胖,易流泪,安静(很少“喵喵”叫)。
有没有觉得斜体部分似曾相识?就是下面内容所描述的对不对?
class Cat:
# 初始状态,self就是对象自己
def __init__(self, name, size, color):
self.age = 0
self.name = name
self.size = size
self.color = color
# 长大一岁,超过14岁就gg了
def grow(self):
self.age += 1
if self.age >= 14:
print("Die!")
self.describe()
else:
print("%d!" % self.age)
# 猫叫(春)
def meow(self):
print("meow meow")
#吃东西(猫会挑食的)
def feed(self, food):
if food == "milk" or food == "fish":
print("Eat!")
elif self.name == "Garfield" and food == "pasta":
print("Eat!")
else:
print("Throw away!")
self.meow()
# 描述状态
def describe(self):
print("%s is %d now. It's a %s %s cat." % (self.name, self.age, self.size, self.color))
但我竟要完全重写!(好吧,你当然可以ctrl+c & ctrl+v,但这手动的办法毕竟不是长久之计啊)
而懒惰的程序员前辈们,为了“减少重复工”这一最高理想,推出了对象这个概念产品,并捆绑销售继承功能附件,世界一下子就简单起来了。
接着上面的“猫类”写:
class Garfield(Cat): # 继承猫类(此时Garfield是**子类**,Cat是**父类**)
def __init__(self, name, color):
size = "fat" # 加菲猫永远是肥胖的
Cat.__init__(self, name, size, color) # 使用Cat的初始化函数(构造函数)
# 增加流泪的“属性”
def tear(self, emotion):
print("%s tears!" % emotion)
# 修改feed()函数,显示加菲猫易流泪且安静的特点
def feed(self, food):
if food == "milk" or food == "fish":
print("Eat!") self.tear("Excited")
elif self.name == "Garfield" and food == "pasta":
print("Eat!")
self.tear("Satisfied")
else:
self.tear("Sad")
让我们重新生成一下加菲猫(对象),并让它“动”起来:
Garfield = Garfield("Garfield", "orange")
Garfield.meow()
Garfield.tear("happy")
Garfield.feed("milk")
Garfield.feed("pasta")
Garfield.feed("water")
Garfield.feed("fish")
Garfield.grow()
Garfield.describe()
很好,加菲猫类成功得到它爹的东西,而且凸显出个人特色了!
有任何问题请回复提出。然后欢迎关注微信公众号格物致愚:
格物致愚