"""
程序运行的机制,会先运行顶格写的代码
初始化:也叫实例化,即通过定义的类得到一个具体的对象
__init__(是个实例方法)的作用:用来定义实例属性(不是类属性)。
定义实例属性的方式有两种
在类里面定义实例属性时:需要加上self,即self.实例属性=形式参数
在类外面定义实例属性时:对象名.属性
self : 表示在类里面,对象本身,是个占坑的符号,代表对象自己本身。
cls:表示类本身
"""
class Animal:
height='1.5' #类属性
def __init__(self,name):
#对象的初始化过程,也叫实例化过程,定义实例属性
#self.属性:定义的是实例属性
#self.属性=形式参数,形式参数和对象的实际参数是一一对应的
self.name=name #传入的属性必须设置成实例属性才能被对象访问到,即self.实例属性=形式参数
@classmethod
def animal_color(cls):
#类方法可以调用类属性,不能调用实例属性和实例方法
print('狗狗的身高%s' % cls.height) #类方法中可以调用类属性
# print(cls.dog_feature()) #报错,类方法中不可以调用实例方法和属性
def dog_feature(self): #实例属性中的self的作用:可以通过self调用类的属性
#实例方法中可以调用其他实例方法、实例属性,类方法
print('%s 的身高为 %s' % (self.name,self.height)) #调用类属性
self.food() #调用实例方法
self.animal_color() #调用类方法
def food(self):
print('吃骨头')
self.toy='球球' #新增一个实例属性
#实例方法的调用
dog=Animal('柯基') #实例化时会首先调到 __init__ 方法
# print(dog.name)
dog.dog_feature()
# 类方法的调用
Animal.animal_color()
# 后天定义的实例属性
# 方法一:
dog=Animal('斗牛')
dog.tail='没有尾巴' #实例化对象后添加属性
print(dog.tail)
# 方法二:
dog=Animal('哈士奇')
# print(dog.toy) #报错,
# 没法直接访问后天定义的属性,需要在访问完实例方法后,才能访问该实例方法中定义的属性,
# 因为程序会先运行顶格写的代码,里面的代码不会被执行
dog.food()
print(dog.toy)
|