python学习之路☞16.类 class

终于到了这一刻,class 大魔王来了,把我弄得晕头转向
什么 类 属性 方法 ?类实例化对象?类继承?方法重写?我的天!!!

'''
类
  一种抽象,用于表示一类事物的共同特征和行为。
  创建一个新的类创建了一个新的对象类型,允许创建该类型的新实例。
  每个类实例都可以附加属性,以维护其状态。
  类实例还可以有方法,用于修改其状态。

如何理解
  类:
    就像是一个蓝图或者模板。它描述了一类事物的特点和行为。

  创建类和对象:
    创建类:
      就是定义这个蓝图。告诉 Python 这个类有哪些特征(属性)和行为(方法)。
    创建对象:
      就是用这个蓝图造出实际的“东西”。
      每个对象都是这个类的一个实例。例如,你定义了一个“狗”的类,然后可以用这个类造出不同的“狗”,每只狗有自己的名字和年龄。

  属性和方法:
    属性:
      就是这个类中的一些数据。例如,每只狗有自己的名字和年龄。
    方法:
      就是这个类可以做的事情。例如,狗可以叫(bark)。

类的结构
    ```python示例
    class ClassName:
        def __init__(self, attribute1, attribute2):
            self.attribute1 = attribute1
            self.attribute2 = attribute2

        def method1(self):
            pass

        def method2(self):
            pass
    ```

具体例子
    ```python示例
    # 定义一个类
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age

        def bark(self):
            return f"{self.name} is barking!"

    # 创建一个对象(实例)
    my_dog = Dog("Buddy", 3)

    # 使用对象的方法
    print(my_dog.bark())  # 输出:Buddy is barking!
    ```

继承:
    子类可以继承父类的属性和方法
    继承结构:
        class P:
            def __init__(self, name, age):
                self.name = name
                self.age = age
        class S(P):
            def __init__(self, name, age):
                super().__init__(name, age)
super()函数:
    用于调用父类的方法,特别是在子类初始化时,调用父类的初始化方法。
方法重写:
    子类可以重写父类的方法,重写的方法与父类的方法具有相同的名称。  
'''

"""练习题
创建动物类
创建狗类继承动物类
实例化狗类,执行动物类的行为
创建不同品种的狗,并获取狗的属性,操控狗的行为,
这条狗应该包含名字、毛色和品种三个属性,
包含吃东西、转圈和跳跃三种行为(方法)。
"""
print('-------创建狗类--------')
class Animal:  # 动物类,拥有所有动物的特点和行为
    """
        初始化方法,当实例化类的时候会优先执行
        好吧,每个动物都有名 色 和 种
    """

    def __init__(self, name, color, breed):
        print('动物类初始化开始')
        """
        注意:
            self.name 是类的属性
            name 是形参传递
        """
        self.name = name
        self.color = color
        self.breed = breed

    def speak_info(self):  # 假设所有的动物都会介绍自己,这怎么可能,唉
        return '我是', self.name, '颜色是', self.color, '品种是', self.breed

    def eat(self, food):  # 动物类共有的行为
        return self.name, '吃', food


"""
    狗类,一个狗的蓝图或模板,狗类继承了动物类,这就意味着,狗可以使用动物的属性和行为
"""
class Dogs(Animal):
    def __init__(self, name, color, breed):
        print('狗类初始化开始')
        super().__init__(name, color, breed)  # 通过 super().__init__() 继承父类初始化的属性

    def eat(self, food):  # 狗类重写了动物类的行为,表现出同样的行为独有的方式
        return self.name, '嘿嘿哈哈哈的吃', food

    def jump(self): # 子类特有方法
        return '狗类特有的蹦跶行为,与父类不同'  # 狗类甚至会拥有父类没有的属性和行为

    def turn_around(self): # 子类特有方法
        return self.name, '转圈'  # 实例化的动物 名字 开始 转圈 这个行为

"""
    动物类实例化
    根据狗的蓝图或模板实例化一条活生生的狗,
    天呐,太不好理解了
"""
print('-------动物类实例化--------')
# 动物类实例化
animals = Animal(name='动物集', color='五彩斑斓的', breed='动物种')

# 狗类实例化
print('-------狗类实例化--------')
siamese_dog = Dogs(name='狗咪', color='紫色的', breed='暹罗狗')
ragdoll_dog = Dogs(name='喵喵叫的狗', color='绿色的', breed='布偶狗')
birman_dog = Dogs(name='咪咪', color='黄色的', breed='伯曼狗')

# 打印动物的属性
print(animals.name, animals.color, animals.breed)
# 打印狗的属性
print('-------实例化狗 实例化动物 的属性--------')
print(birman_dog.name, birman_dog.color, birman_dog.breed)
print(siamese_dog.name, siamese_dog.color, siamese_dog.breed)
print(ragdoll_dog.name, ragdoll_dog.color, ragdoll_dog.breed)

# 操纵动物的行为
print('-------运行 实例化动物 方法--------')
print(animals.speak_info())
print(animals.eat('小动物'))
# 操控狗的行为
"""
这里可以发现,狗类 里并没有 speak_info() 行为
但是由于继承关系,狗类 可以使用 动物类 的行为
"""
print('-------实例化狗 运行 实例化动物 方法--------')
print(birman_dog.speak_info())
print(siamese_dog.speak_info())
print(ragdoll_dog.speak_info())
"""
这里可以发现即使是继承关系
动物 和 狗 的 eat() 的行为虽然相同,但是方式却是不同的,这就是方法的重写
"""
print('-------实例化狗 执行重写 实例化动物 方法--------')
print(birman_dog.eat(food='小虫干'))
print(siamese_dog.eat(food='小鱼干'))
print(ragdoll_dog.eat(food='小鼠干'))
"""
这里可以发现狗类有自己特有的行为,
即使是继承关系,也没有必要完全和动物类相同
各自安好。。。
"""
print('-------实例化狗 特有的 方法--------')
print(birman_dog.turn_around(), birman_dog.jump())
print(siamese_dog.turn_around(), siamese_dog.jump())
print(ragdoll_dog.turn_around(), ragdoll_dog.jump())

参考

30 类和对象的定义_哔哩哔哩_bilibili
31 类的实例化_哔哩哔哩_bilibili
32 类和对象题目讲解_哔哩哔哩_bilibili
33 类的继承_哔哩哔哩_bilibili
34 方法重写_哔哩哔哩_bilibili
Python-Core-50-Courses/第17课:面向对象编程入门.md at master · jackfrued/Python-Core-50-Courses · GitHub

24 个赞

太强了大佬!

6 个赞

还不能算是大佬,哇,你今天很速度嘛!

那必须的 !

1 个赞

感谢你的分享

1 个赞

谢谢你来看看我

1 个赞

坚持!加油!

1 个赞

感谢大佬一直的付出

1 个赞

越往下学,越难

唔,就是越来越难了

爬山,山越高越难爬!

1 个赞