精进,来源于重复和深入。
——杰
通过学习,我对这两则的理解是这样的。 is a 指的对象是类和对象之间的一种继承关系,比如,类human 和对象“小明”;has a 指的对象是类和类之间的一种包含关系。
我们学习理解has a和is a 的关系区别,实则是在弄明白代码之间是实现继承和接口继承的关系,提高代码的重用性。
下面我们来看一个列子
class Compter:
def __init__(self,brand,type,color):
self.brand=brand
self.type=type
self.color=color
def online(self):
print("正在使用电脑上网")
def __str__(self):
return self.brand + '-------'+self.type+'------'+self.color
class Book:
def __init__(self,bname,number,author):
self.bname=bname
self.number=number
self.author=author
def __str__(self):
return self.bname+self.author+self.number
class sudent:
def __init__(self,name,compter,book):
self.name=name
self.compter=compter
self.Book=[]
self.Book.append(book)
def __str__(self):
return self.name+'------->'+str(self.compter)+'-----'+str(self.Book)
C=Compter('mac','pro','深灰色')
print(C)
Book('盗墓','10','南派')
print(Book)
stu=sudent('fefbg',C,Book)
print(stu)
结果
mac-------pro------深灰色
<class '__main__.Book'>
fefbg------->mac-------pro------深灰色-----[<class '__main__.Book'>]
这里我们可以发现,sudent和compter、Book之间属于同级关系的类,但是我们在sudent中,我们引用了compter和Book。
在初次的运行过程中,我发现很多输出错误。在后来的学习过程中,我才知道,这里有一个变量的概念。
在python中,有系统变量和自定义的变量。系统变量,主要是指int,list,set,string等;自定义变量,我们可以理解成是用户自己写的,比如我们这里的类,就是我们写的。
最后的解决办法是,在输出的地方,把输入的变量(对象)强转成字符串。
总结:
在python中,不仅函数之间可以相互引用,而且类之间也可以相互引用。一开始,我理解不了,但是也渐渐认识到python的强大。不管是我们赋值,还是创建对象,python都会给我们分配地址,既然分配了地址,我们就可以大胆引用,引用的过程中,注意类型的转化。