Python面向对象编程(查漏补缺)


一、封装

封装:就是把属性和方法封装到一个抽象的类中。

1.调用方法

代码如下(示例):

class Student():
    def study(self,course_name):
        print(f'学生正在学习{course_name}')
    def play(self):
        print('学生正在玩游戏')
stu1 = Student()
stu2 = Student()

stu1.study('python')
#调用类方法,需要对类进行实例化
Student().study('Java')

2.初始化方法

  • init()方法: (下划线无法显示)创建对象时,会在内存中获得保存对象所需的内存空间,然后自动执行初始化方法,完成内存的初始化方法。简而言之,就是在创建对象时为对象绑定属性并赋初值。
  • 调用: 属性用self进行调用,参数直接调用

3.属性装饰器

代码如下(示例):

#属性装饰器
class Student():
    def __init__(self,name,age):
        #创建私有属性
        self.__age = age
        self.__name = name
        
    #获取私有属性
    @property
    def name(self):
        return self.__name
    #修改私有属性
    @name.setter
    def name(self,name):
        self.__name=name or 'unknown'
    @property
    def age(self):
        return self.__age

    def study(self,course_name):
        print(f'{self.__name}正在学习{course_name}')

stu3=Student('王大锤',50)
print(stu3.name,stu3.age)

4.方法

  • 静态方法: 调用时,不需要对类进行实例化,可以直接使用:类名.方法()
  • 静态方法vs类方法:
    1.参数: 静态传参——参数,类方法传参——第一个必须是cls
    2.函数: 静态方法不和当前类绑定,可以看做一个单独的函数,类方法代表当前的方法属于当前的类
    3.调用: 静态方法不需要创建对象就可以调用,类方法不可以通过实例对象进行调用,实例方法也不可以通过类对象调用。
     

二、继承

继承:就是实现代码的复用,相同的代码不需要重复的编写。

1.继承语法

代码如下(示例):

class 类名(父类名):
    pass

2.方法的重写

子类想增加新功能,而父类不能修改功能时,可使用方法重写

class Dog(): 
    def bark(self):
        print('bark!')
        
class Xiaotianquan(Dog):
    def fly(self):
        print("fly!")
    #方法的重写
    def bark(self):
        print('bark as a god!')

3.调用父类方法

调用父类方法有以下两种方式:

class Xiaotianquan(Dog):
    def fly(self):
        print("fly!")
    def bark(self):
        print('bark as a god!')
        #调用父类方法1,super()是个对象
        super().bark()
        
        #调用父类方法2
        Dog.bark(self)

三、多态

多态是不同子类对象调用相同的父类方法,产生不同的执行结果。

class A:
    def work(self):
        print('人类需要工作')
class B(A):
    def work(self):
        print('程序员在工作--------------代码')
class C(A):
    def work(self):
        print('设计师在工作--------------图纸')

b=B()
c=C()
b.work()
c.work()

四、单例设计模式

这是让类创建的对象,在系统中只有唯一的一个实例并且内存地址是相同的。只初始化一次的到单例设计模式实现代码如下所示:

class MusicPlayer:
    instance = None
    init_Flag = False
    def __new__(cls) :
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance
    def __init__(self):
        if MusicPlayer.init_Flag:
            return
        print('初始化中....')
        MusicPlayer.init_Flag=True

player1 = MusicPlayer()
player2 = MusicPlayer()
print(player1,player2)

猜你喜欢

转载自blog.csdn.net/qq_42804713/article/details/129231566