《笨方法学 Python 3》42.对象、类及从属关系

有个重要的概念必须弄明白,那就是‘类’和‘对象’的区别。

原文中花费了大量语段来描述,我就按个人理解简单的归纳一下,可能不对,如有误,请指出:

1.类:就是具有相同属性的方法的集合,此处的方法就是指的函数,一个类里面包含大量的函数(方法),这些函数之间具有共同之处。

2.对象:对象就是类的实例化,类就是本体。本体是无法直接调用的,而对象就是类的副本,分身之类的东西,通过将类实例化得到对象,然后像变量一样赋值给一个东西,就可以通过这个东西调用这个类里面的方法。

3.从属关系:is-a(是什么)和has-a(有什么):

       按照书中的例子,‘鱼’ 是一个类,‘泥鳅’ 也是一个类,‘泥鳅’ is-a ‘鱼’,则 ‘鱼’ 是 ‘泥鳅’ 的父类。‘泥鳅’ has-a ‘胡须’,则 ‘胡须’ 是 ‘泥鳅’ 的属性或者方法。

        如果给这只 ‘泥鳅’ 取个名字,叫 ‘小李’,那么取名这个行为就叫做 ‘实例化’ ,如果你使用了 ‘小李’ (比如用它做了个菜),这样它是一个对象。


基础练习:

下面的代码不需要手码,甚至不需要运行,只要把注释下面的代码的关系写到注释后面就行了,主要是练习从属关系的:

##  Animal is-a object (yes, sort of confusing) look at the extra credit
class Animal(object):
	pass

##Dog is-a Animal
class Dog(Animal):
	
	def __init__(self, name):
		##??
		self.name = name


##??
class Cat(Animal):
	
	def __init__(self, name):
		##??
		self.name = name

##??
class Person(object):
	
	def __init__(self, name):
		##??
		self.name = name
		## Person has-a pet of some kind
		self.pet = None

##??
class Employee(Person):
	
	def __init__(self, name, salary):
		##?? hmm what is this strange magic?
		super(Employee, self).__init__(name)
		##??
		self.name = name

class Fish(object):
	pass

##??
class Salmon(Fish):
	pass

##??
class Halibut(Fish):
	pass
	
## rover is-a Dog
rover = Dog("Rover")

##??
satan = Cat("Satan")

##??
mary = Person("Mary")

##??
mary.pet = satan

##??
frank = Employee("Frank", 120000)

##??
frank.pet = rover

##??
flipper = Fish()

##??
crouse = Salmon()

##??
harry = Halibut()

# ================================

 有点错误,已经改掉


关于class Name(object)

      在Python 3 中,你不需要在类名后面加(object),但是Python是一门优雅的语言,它信奉“显式优于隐式”,所以最好还是写上,至于(object)具体有什么含义,只要记住 class Name(objcet) 是一个“基本的简单类”就行了。


另,代码中有一行:super(Employes, self).__init__(name),是做什么用的?

这个是Python中调用父类的__init__方法的一个方法。详细了解可以百度  super Python 来了解一下。值得注意的是Python 3 中这个方法可以简化为  super().__init__(name)

 

END!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值