003、面向对象(一):类和对象
1、类和对象
a、定义在类中的函数,称为方法 ;
b、python里面 c = Cat() ,称为实例化; 实列化类,创建对应的对象 ;
c、self 就是代表对象自己, id(self) 和 id(c) 的结果一样 ;
d、实例化对象的时候,对象是谁,self就是谁 ;
e、在定义类的时候,并不知道对象是谁。用self来表示对象 ;
g、类里面的方法可以调用类中其他方法 ;
h、实例是独立的,实例调用自己的方法和属性 ;
i、类 和 实例 都可以调用类的非私有属性、方法 ;实例属性,只有类可以访问, 类属性,所有实例都可以访问 ;
j、执行代码 c = Cat()时, 先执行 __new()__ 方法,执行后得到一个self对象,再执行 __init(self)__ ;
k、def catch_mouse(self): self 是一个参数,但是在调用时不需要传这个位置参数 ;
示例代码如下:
class Cat(): # 定义一个类属性(非私有属性)所有实例共有的属性, 比如:物种:动物 ; # 非私有属性,类和实例都可以调用 ; wu_zhong = '动物' # 对象的初始化方法 ; # 执行代码 c = Cat()时, 先执行 __new()__ 方法,执行后得到一个self对象,再执行 __init(self)__ # 可以定义默认参数,category='猫科' def __init__(self, name, color, category='猫科'): self.name = name # 用 self.name 作为对象的属性,接受name的赋值 ; self.color = color self.category = category print(id(self)) # 定义在类中的函数,称为方法 ; # 在定义类的时候,并不知道实例是谁,用self来表示对象 ; def catch_mouse(self): print('{0}抓了一只老鼠'.format(self.name)) # 类里面的方法可以调用类中其他方法 ; def eat(self): self.catch_mouse() print('{0}吃了一只老鼠'.format(self.name)) # 类内部调用类属性 def lei_bie(self): print(self.wu_zhong, self.category) # c = Cat() ,称为实例化; 实列化类,创建实例; # 实例化类的时候,对象是谁,self就是谁 ; c = Cat('加菲', '灰色') print(id(c)) # self 就是代表对象自己, id(self) 和 id(c) 的结果一样 ; # print(id(c)) 打印的结果与 print(id(self)) 一样 ; # 类 和 实例 都可以调用类的非私有属性、方法 print('类调用类的属性: {0}'.format(Cat.wu_zhong)) print('实例调用类的属性: {0}'.format(c.wu_zhong)) c.lei_bie()
执行结果如下:
3015984317440
3015984317440
类调用类的属性: 动物
实例调用类的属性: 动物
动物 猫科
Process finished with exit code 0
本人觉得对象和实例是有区别的:类比介绍妹子相亲,最近一个月相了3个对象,有阿红、阿美、阿桃 ;
这里 妹子是属于类 ,对象(属于妹子范围内的抽象),阿红属于实例 ;对象在类和实例范围之间 ;