类属性

"""
对象(实例对象):通过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())
# 多态的好处
# 1.增加代码的灵活性
# 2.增加代码的可扩展性

results matching ""

    No results matching ""