zoukankan      html  css  js  c++  java
  • Python类的学习,看这一篇文章就够了!

    PS:我是写C++ 的,并且之前Python基础也看过很多遍了,这次只是做一个简单的笔记,方便以后复习时查看。所以如果你是0基础就不要再来浪费时间了。

    1、构造函数、析构函数、类属性、类方法、静态方法的使用。

    class Cat:
        # 使用赋值语句定义类属性,记录所有对象的数量
        count = 0
    
        # 类方法
        @classmethod
        def show_cat_count(cls):
            print("猫对象的数量为:%d." % Cat.count)
    
        # 静态方法
        @staticmethod
        def run():
            # 不访问实例属性/类属性
            print("我是一只乱跑的小猫!")
    
        def __init__(self):
            print("我是构造函数!")
            # 让类属性的值+1
            Cat.count += 1
    
        def eat(self):
            # 哪一个对象调用的方法,self就是哪一个对象的引用
            print("%s 爱吃鱼" % self.name)
    
        def drink(self):
            print("%s 要喝水" % self.name)
    
        def __del__(self):
            print("我是析构函数!")
    
    
    # 创建猫对象(会调用构造函数)
    tom = Cat()
    # 可以使用 .属性名 利用赋值语句设置对象属性(不推荐在类的外部给对象增加属性)
    tom.name = "Tom"
    tom.eat()
    tom.drink()
    # 输出猫对象的总数
    print("工具对象总数 %d" % tom.count)  # 不推荐使用
    print("===> %d" % Cat.count)
    # 调用类方法
    Cat.show_cat_count()
    # 通过类名.调用静态方法 - 不需要创建对象
    Cat.run()
    # del 关键字可以删除一个对象(会调用构造函数)
    del tom

    2、私有属性、私有方法、公有属性、公有方法、__str__(self)方法的使用

    class Cat:
        def __init__(self, new_name):
            print("我是构造函数!")
            # 公有属性
            self.name = new_name
            # 私有属性
            self.__color = "白色"
    
        def __str__(self):
            print("利用print函数打印类对象的时候执行!")
            # 必须返回一个字符串
            return "我是小猫%s!" % self.name
    
        # 私有方法
        def __eat(self):
            # 哪一个对象调用的方法,self就是哪一个对象的引用
            print("%s 爱吃鱼" % self.name)
    
        # 公有方法
        def drink(self):
            print("%s 要喝水" % self.name)
    
    
    tom = Cat("小白")
    print(tom.name)  # 打印类的公有属性
    tom.drink()
    # 伪私有属性,在外界不能够被直接访问
    print(tom._Cat__color)
    # 伪私有方法,同样不允许在外界直接访问
    tom._Cat__eat()
    print(tom) # 会执行类的 __str__()函数

    3、类的单继承、重写父类方法、调用父类方法

    class Dog(object):
        # 构造函数
        def __init__(self, name):
            # 公有变量
            self.name = name
    
        def game(self):
            print("%s 蹦蹦跳跳的玩耍..." % self.name)
    
        def bark(self):
            print("汪汪叫!")
    
    
    class XiaoTianDog(Dog):
    
        def game(self):
            print("%s 飞到天上去玩耍..." % self.name)
    
        def bark(self):
            print("神一样的叫唤...")
            # 2. 使用 super(). 调用原本在父类中封装的方法
            super().bark()
            # 父类名.方法(self)
            Dog.bark(self)
            # 注意:如果使用子类调用方法,会出现递归调用 - 死循环!
            # XiaoTianQuan.bark(self)
    
    
    class Person(object):
        def __init__(self, name):
            self.name = name
    
        def game_with_dog(self, dog):
            print("%s 和 %s 快乐的玩耍..." % (self.name, dog.name))
            # 让狗玩耍
            dog.game()
    
    
    # 1. 创建一个狗对象 使用类名()创建对象的时候,会自动调用初始化方法 __init__
    # wang_cai = Dog("旺财")
    wang_cai = XiaoTianDog("飞天旺财")
    # 如果子类中,重写了父类的方法,在使用子类对象调用方法时,会调用子类中重写的方法
    wang_cai.bark()
    # 2. 创建一个小明对象
    xiao_ming = Person("小明")
    # 3. 让小明调用和狗玩的方法
    xiao_ming.game_with_dog(wang_cai)

    4、类的多继承、类对象调用方法的顺序

    class A:
        def test(self):
            print("A --- test 方法")
    
        def demo(self):
            print("A --- demo 方法")
    
    
    class B:
        def test(self):
            print("B --- test 方法")
    
    
    #class C(A, B)
    class C(B, A):
        """多继承可以让子类对象,同时具有多个父类的属性和方法"""
        pass
    
    
    c = C()
    c.test()
    c.demo()
    # 确定C类对象调用方法的顺序
    print(C.__mro__)

    5、类的单例模式

    class MusicPlayer(object):
        # 记录第一个被创建对象的引用
        instance = None
        # 记录是否执行过初始化动作
        init_flag = False
    
        # 1. 创建对象时,new方法会被自动调用
        def __new__(cls, *args, **kwargs):
            # 1. 判断类属性是否是空对象
            if cls.instance is None:
                # 2. 调用父类的方法,为第一个对象分配空间
                cls.instance = super().__new__(cls)
            # 3. 返回类属性保存的对象引用
            return cls.instance
    
        def __init__(self):
            # 1. 判断是否执行过初始化动作
            if MusicPlayer.init_flag:
                return
            # 2. 如果没有执行过,在执行初始化动作
            print("初始化播放器")
            # 3. 修改类属性的标记
            MusicPlayer.init_flag = True
    
    
    # 创建多个对象
    player1 = MusicPlayer()
    print(player1)
    player2 = MusicPlayer()
    print(player2)
  • 相关阅读:
    IDEA Inspections详解
    IDEA 阿里编码规范插件
    IDEA Save Actions插件
    IDEA Lombok插件
    设计模式-简单工厂模式与工厂模式
    DAO设计模式
    Jcrop+strut2+jsp实现图片剪切
    Spring的Bean的作用域
    Spring的事务机制
    windows 下 Redis 主从 读写分离
  • 原文地址:https://www.cnblogs.com/duxie/p/12681932.html
Copyright © 2011-2022 走看看