Python学习笔记(十七):多态、类属性与静态方法

目录

    • 1 多态
    • 2 类属性和实例属性
      • 2.1 类属性
      • 2.2 修改类属性
      • 2.3 实例属性
    • 3 静态⽅法

1 多态

多态指的是⼀类事物有多种形态,(⼀个抽象类有多个⼦类,因⽽多态的概念依赖于继承)。

  1. 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果。
  2. 好处:调⽤灵活,有了多态,更容易编写出通⽤的代码,做出通⽤的编程,以适应需求的不断变化!
'''
通过对父类形参传入子类对象实参来实现多态
'''
class Dog():
    def bark(self):
        print("I\' a dog !")

class BlackDog():
    def bark(self):
        print("I\' a black dog !")

class WhiteDog():
    def bark(self):
        print("I\' a white dog !")

#参数为父类类型的引用,但实际传入为不同的子类对象
def let_dog_bark(dog):
    dog.bark()

bd=BlackDog()
wd=WhiteDog()
let_dog_bark(bd)
let_dog_bark(wd)

2 类属性和实例属性

2.1 类属性

类属性类类似于静态变量,可以通过类名访问,在python中,类属性也可以通过实例方法。

  1. 记录的某项数据 始终保持⼀致时,则定义类属性。
  2. 实例属性 要求 每个对象 为其 单独开辟⼀份内存空间 来记录数据,⽽ 类属性 为全类所共有,仅占⽤⼀份内存,更加节省内存空间

在类的方法前定义变量,就完成类属性的定义。下面我们在Dog类中定义color类属性。

class Dog():
    color="white"
    
#通过类名访问
print(Dog.color)
#通过对象访问
dog1=Dog()
print(dog1.color)
white
white

2.2 修改类属性

类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了⼀个实例属性。

class Dog():
    color="white"

print(Dog.color)
Dog.color="black"
print(Dog.color)
#通过实例对象修改
dog1=Dog()
dog1.color="yellow"
print(Dog.color) #可以发现类属性color并未修改
print(dog1.color) #同时的确新建了一个为yellow的类属性
white
black
black
yellow

2.3 实例属性

实例属性可以在方法中进行定义,哪怕方法中属性的名称和类属性相同,也无法调用类属性,而只是创建了一个同名的实例属性。

class Dog():
    color="white"
    def __init__(self):
        self.color="black"

#通过类名访问
print(Dog.color)

#通过对象访问
dog1=Dog()
print(dog1.color)
white
black

3 静态⽅法

需要通过装饰器 @staticmethod 来进⾏修饰,静态⽅法既不需要传递类对象也不需要传递实例对象(形参没有self/cls)。
静态⽅法 也能够通过 实例对象 和 类对象 去访问。

class Dog():
    @staticmethod
    def bark():
        print("I\' a cute dog !")

Dog.bark()
I' a cute dog !

你可能感兴趣的:(Python,多态,类,面向对象编程,python)