类属性
"""
对象(实例对象):通过cLass定义的类创建的,即通过类实例化来的,又称为实例,实例对象实例对象定义的房性称为是 实例属性,通过实例对象(seLf)定义的属性都是实例属性
实例属性:每个实例对家中都存在一份,并且值可能是不一样的
类(类对象):通过class定义的,又称为 类对泉,是python解释器在创建类的时候自动创建的
作用:1. 通过类对象,去定义实例对家 2. 类对家可以保存一些属性信息,称为类属性
类属性的定义:在关内部,方法外部定义的变量就是类属性
类属性,字内存中只有一份
如何确定一个属性是该定义为实例属性还是类属性?
先假设这个房性为实例属丝,查看这个属性值对于不同的实例对家,属性值是否都一样,并且需要同时交化.
如果是,则可以定义为类属性
如果不是,网可以定义为实例属性
"""
class Dog(object):
class_name = '狗'
def __init__(self, name, age):
self.name = name
self.age = age
dog1 = Dog('旺财', 3)
print(dog1.name)
print(dog1.age)
dog2 = Dog('小黑', 2)
print(dog2.name)
print(dog2.age)
print(Dog.class_name)
Dog.class_name = 'dog'
print(Dog.class_name)
静态方法
"""
实例方法:类中默认定义的方法,就是实例方法,第一个参数为seLf,表示实例对象
类方法:使用 @cLassmethod 装饰的方法,称为类方法,第一个参数是cLs,代表的是类对象自己
静态方法:使用 @staticmethod 装饰的方法,称为静态方法,对参数没有特殊要求,可以有,可以没有
什么情况定义为实例方法,什么情况定义为类方法,什么情况下静态方法?
1. 如果在方法中使用了实例属性,那么该方法必须定义为实例方法
2. 前提:不需要使用实例属性,需要使用类属性,可以把这个方法定义为类方法
3. 前提:不需要使用实例属性,同时不需要使用类属性,此时可以把这个方法定义为静态方法
"""
class Dog(object):
class_name = '狗'
def __init__(self, name, age):
self.name = name
self.age = age
def play(self):
print(f'{self.name}在玩耍')
@staticmethod # 静态方法
def show_info():
print('这是一个Dog类')
dog1 = Dog('旺财', 3)
dog1.play()
dog1.show_info()
Dog.show_info()
多态
class Animal(object):
def run(self):
print('Animal is running...')
class Dog(Animal):
def run(self):
print('Dog is running...')
class Cat(Animal):
def run(self):
print('Cat is running...')
def run_twice(animal):
animal.run()
animal.run()
run_twice(Animal())
run_twice(Dog())
run_twice(Cat())