- 习题45 对象、类、以及从属关系
class Animal():
pass
class Dog(Animal):
# 从Animal()父类继承,创建一个Dog()字类
def __init__(self, name):
self.name = name
class Cat(Animal):
def __init__(self, name):
self.name = name
class Person():
def __init__(self, name):
# 初始化属性name
self.name = name
# 指定属性pet默认值为None
self.pet = None
'''
def __init__(self, name):
__init__是一个特殊的方法,包含必不可少的self形参以及需要传递参数的其他形参,此处为name
以self为前缀的变量都可供类中的所有方式使用
self.name = name 获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例
'''
class Employee(Person):
def __init__(self, name, salary):
super(Employee, self).__init__(name) ## 初始化父类的属性
'''
super是个特殊的函数,帮助python将父类和子类关联起来。
这行代码让python调用Person()父类的方法__init__(),
让Employee()实例包含父类Person的所有属性。
python3.6中的代码写法为super().__init__(name)
'''
self.salary = salary
class Fish():
pass
class Salmon(Fish):
pass
class Halibut(Fish):
pass
# 创建实例
rover = Dog("Rover")
satan = Cat("Satan") # 创建Cat()实例,传递参数Satan给形参name,然后关联到当前创建的一只名为Satan的猫的实例
mary = Person("Mary")
mary.pet = satan # 访问实例的属性,设置Person()类中pet的值为satan,调用实例中的方法也是句点调用发,marry.f()
frank = Employee("Frank", 120000)
frank.pet = rover
flipper = Fish()
course = Salmon()
harry = Halibut()
心得体会:
- 习题43、44制作游戏并打分我就没有去做了,太耗费时间。时间有限的前提下,我还是把41、42的代码好好多看几遍,理解理解
- 在实际使用过程中,我们先抽象一类具体事物和情景,将其通用行为编写成类。
- 基于类创建对象时,每个对象都具有这个类的通用行为。根据类来创建对象被称为实例化。
- 除了创建新的类,我们还可以从另一个类去继承某些属性和方法。比如从Dog()类继承,创建一个Husky(Dog),这个哈士奇除了继承了通常意义上狗的特征意外,还有一些自己独特的特征,比如活泼、温顺等等,这些独有特征可以在Husky(Dog)类下添加
- 注意点:
①在python2.7中从空白创建类是需要在类名称后面的括号内包含单词object,python3.6可以为空,在继承父类时括号内是父类的名称
②python3.6中从一个类创建一个新类叫做继承,也就是《笨办法学Pyhton》里描述的“两者以类的方式相关联”