很显然,在学习类与对象之前,我们得知道一些面向对象术语。
'''
类(class):告诉Python创建新类型的东西。
对象(object):两个意思,即最基本的东西,或者某个东西的实例,不唯一,可以self等
实例(instance):这是让Python创建一个类时得到的东西。
def:这是在类里边定义函数的方法。
self:在类的函数中,self指代被访问的对象或者实例的一个变量,不唯一。
继承(inheritance):指一个类可以继承另一个类的特性,和父子关系类似。
组合(composition):指一个类可以将别的类作为它的部件构建起来,有点儿像车子和车轮的关系。
属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量。
是什么(is-a):用来描述继承关系,如金鱼is a 鱼
有什么(has-a):用来描述某个东西是由另外一些东西组成的,或者某个东西有某个特性。如金鱼 has a 嘴
'''
接下来我会给一些语汇练习,可以加深你们对类与对象的一些理解:
'''
class X(Y):创建一个叫X的类,它是Y的一种。
class X(object):
def __init__(self,J): 类X有一个__init__接收self和J作为参数。
class X(object):
def M(self,J): 类X有一个函数名称为M,它接收self和J作为参数。
foo=X(): 将foo设为类X的一个实例。
foo.M(J): 从foo中找到M函数,并使用self和J参数调用它。
foo.K=Q: 从foo中获取K属性,并将其设为Q。
'''
仔细阅读这段话,它会帮助你加深理解类与对象。
我们可以把一些变量改成问号,得出一个公式:
'''
1.创建一个叫???的类,它是Y的一种。
2.类???有一个__init__,能接收self和???作为参数。
3.类???有一个函数名称为???,可以接收self和???作为参数。
4.将foo设为class???的一个实例。
5.从foo中找到???函数,并使用self和???参数调用它。
6.从foo中获取???属性,并将其设为???。
'''
现在你能理解了吗?建议动手写一个类与对象的代码函数吧!
以下是我动手尝试写的代码:
class Parents(object): #定义一个家长类
def __init__(self,name,age,child_name,child_age): #这个家长类的属性是姓名,年龄,孩子姓名和孩子年龄。
self.name=name
self.age=age
self.child_name=child_name
self.child_age=child_age
def information(self): #打印一个实例化对象的信息的函数
print('''
your name is %s.
your age is %d.
your child name is %s.
your child age is %d.
'''%(self.name,self.age,self.child_name,self.child_age))
Huang=Parents('huangfather',20,'huangpaopao',5) #创建第一个对象实例化,存储到变量Huang。
Yan=Parents('yanmother',20,'yanpaopao',5) #创建第二个对象实例化,存储到变量Yan。
Huang.information()
Yan.information()
输出结果:
your name is huangfather.
your age is 20.
your child name is huangpaopao.
your child age is 5.
your name is yanmother.
your age is 20.
your child name is yanpaopao.
your child age is 5.
接下来,我们来深入以下类与对象之间的从属关系。
在编写项目中,我们实际上是要创建许许多多个类的。
在这些类中,有些是存在联系的。
比如is-a关系,金鱼 is-a 鱼。
比如has-a关系,人 has-a 宠物。
这两者的关系很好理解吧?
如果把对象引进来的话呢?我们把金鱼取名为小丽。
小丽 is-a 鱼,这句话没毛病吧?
但这个时候已经不是类与类之间的关系了,而是对象与类的关系。
此时小丽是类的一个实例化出来的对象,也就是说,小丽是金鱼的一个实例。
我们把宠物取名为二哈,人 has-a 二哈,这也是类与对象之间的联系。
如果把人命名为大明,
大明 has-a 二哈,这个就是对象与对象之间的联系,因为两者都是实例。
所以我们整理一下:金鱼、鱼、人和宠物都是类,小丽、二哈和大明都是对象。
上段文字你一下子看完你可能会感觉太绕了,我不如放一段代码,注意看我的注释行动:
#Animal is-a object
class Animal(object):
pass
#DOG is-a Animal
class Dog(Animal):
def __init__(self,name):
self.name=name
#Cat is-a Animal
class Cat(Animal):
def __init__(self,name):
self.name=name
#Person is-a object
class Person(object):
def __init__(self,name):
self.name=name
#Person has-a pet of some kind
self.pet=None
#Employee is-a Person
class Employee(Person):
def __init__(self,name,salary):
super(Employee,self).__init__(name)
#Employee has-a salary
self.salary=salary
#Fish is-a object
class Fish(object):
pass
#Salmon is-a Fish
class Salmon(Fish):
pass
#Halibut is-a Fish
class Halibut(Fish):
pass
#rover is-a Dog
rover = Dog("Rover")
#satan is-a Cat
satan = Cat("Satan")
#Mary is-a Person
mary = Person("Mary")
#Mary has-a Cat pet
mary.pet=satan
#Frank has-a 120000 salary
frank=Employee("Frank",120000)
#frank has-a DOG pet
frank.pet=rover
#filpper is-a Fish
flipper = Fish()
#crouse is-a Salmon
crouse = Salmon()
#harry is-a Halibut
harry =Halibut()
好好看这段代码以及我的注释,希望能对你理解类与类的联系,类与对象的联系和对象与对象的联系有所帮助。