一,类的定义
首先看下面例子:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"我叫 {self.name},今年 {self.age} 岁。")
概念:这里定义了一个‘class类’叫做person。这里可以把它想象为一个函数库,只要定义了一个‘类’,就可以在这里调用类。
结构:
#__init__
方法是一个特殊的方法,当我们创建 Person
类的对象时,这个方法会被自动调用。
在这个方法中,设置对象的初始属性值(在类里面,name,age这些变量就是属性)。#introduce
方法定义了一个行为,当调用这个方法时,会打印出关于这个人的介绍信息。
举例:
接下来根据这个类创建对象:
person1 = Person("张三", 20)
person2 = Person("李四", 25)
person1和person2叫做实例/对象。他们都在person这个’类‘下定义的。他们都可访问person这个类(库),调用里面的方法(即函数)和属性(即变量)
#访问属性(变量)
print(person1.name) # 输出 "张三"
print(person2.age) # 输出 25
#访问方法(函数)
person1.introduce() # 输出 "我叫 张三,今年 20 岁。"
person2.introduce() # 输出 "我叫 李四,今年 25 岁。"
二、类的属性
类的属性分为类属性(属于整个类)和实例属性(只属于实例)
class Circle:
pi = 3.14 # 这是一个类属性
def __init__(self, radius):
self.radius = radius # 这是一个实例属性
def calculate_area(self):
return Circle.pi * self.radius ** 2 # 在方法中使用类属性
类属性:在这个例子中,pi
就是类属性,无论创建多少个 Circle
类的实例,pi
的值都是 3.14 且共享
实例属性:实例属性则是属于每个具体实例(对象)的属性,每个实例都有自己独立的值。比如上面例子中的 radius
,每个 Circle
对象的 radius
都可以不同。
circle1 = Circle(5)
circle2 = Circle(10)
print(circle1.pi) # 输出 3.14
print(circle2.pi) # 输出 3.14
print(circle1.radius) # 输出 5
print(circle2.radius) # 输出 10
三、类的方法
类的方法主要有实例方法、类方法和静态方法。
#实例方法:实例方法是最常见的方法,第一个参数必须是 self
,代表调用该方法的实例对象。通过 self
,可以访问和操作实例的属性。
示例:
class Dog:
def __init__(self, name):
self.name = name
def bark(self): # 这是一个实例方法
print(f"{self.name} 在叫")
调用类方法:
my_dog = Dog("小黄")
my_dog.bark()
#类方法:使用 @classmethod
装饰器定义,第一个参数通常是 cls
,代表类本身。类方法可以直接通过类名调用,也可以通过实例调用,但无论哪种方式,第一个参数始终是类本身。
示例:
class Cat:
count = 0
def __init__(self):
Cat.count += 1
@classmethod
def get_count(cls): # 这是一个类方法
print(f"当前猫的数量是:{cls.count}")
关于解释器的说明:
调用类方法:
Cat.get_count()
静态方法:使用 @staticmethod
装饰器定义,不需要传递 self
或 cls
参数。静态方法与类或实例的状态无关,只是一个普通的函数,放在类中是为了组织代码的逻辑。
示例:
class Bird:
@staticmethod
def fly_info(): # 这是一个静态方法
print("鸟儿可以飞翔")
调用静态方法:
Bird.fly_info()
四、构造方法(__init__
方法)
__init__
方法是 Python 类中的一个特殊方法,也称为构造方法。当我们创建一个类的实例(对象)时,这个方法会被自动调用。
例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"我叫{self.name},今年{self.age}岁。")
# 创建 Person 类的实例
person1 = Person("张三", 25)
person1.introduce()
五、继承
继承是面向对象编程中的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。
class Animal:
def __init__(self, name):
self.name = name
def move(self):
print(f"{self.name} 在移动")
class Dog(Animal):
def bark(self):
print(f"{self.name} 在叫")
my_dog = Dog("小黄")
my_dog.move() # 继承自父类的方法
my_dog.bark() # 子类自己的方法
在上述示例中,Dog
类继承自 Animal
类。Dog
类自动拥有了 Animal
类的 __init__
方法和 move
方法,同时还可以定义自己特有的 bark
方法。