终于到了这一刻,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