Python怎么使用Class?一文详解Python类的定义、属性、方法与实例,助你轻松掌握面向对象编程!
说起Python,绕不开的就是class这个东西。为什么?因为它可是面向对象编程的基石!想象一下,我们用乐高积木搭模型,class就像是各种形状的积木块,你可以随意组合,构建出复杂的、有意思的玩意儿。
class到底是什么?简单来说,它就是一个模板或者蓝图,告诉计算机“我想创造一类东西,它们应该长什么样,能做什么”。比如说,我们想定义一个“狗”的类,那么这个类里面可能包含狗的名字、品种、年龄等属性,以及狗可以叫、可以跑、可以吃东西等方法。
定义一个类其实很简单:
“`python
class Dog:
def init(self, name, breed, age):
self.name = name
self.breed = breed
self.age = age
def bark(self):
print("汪汪汪!")
def description(self):
return f"{self.name}是一只{self.breed},今年{self.age}岁了。"
你瞧,这样就定义好了一个Dog类。
“`
这里面,class Dog:
定义了一个名为 Dog
的类。__init__
是一个特殊的方法,被称为构造函数。它会在你创建一个 Dog
类的实例时被自动调用。self
是一个约定俗成的参数,它代表的是类的实例本身,通过self.name = name
,我们将传入的名字赋值给实例的name
属性。
然后,bark
和 description
是 Dog
类的两个方法。bark
方法让狗叫,description
方法返回狗的描述信息。
怎么用呢?创建实例啊!
“`python
my_dog = Dog(“旺财”, “中华田园犬”, 3)
print(my_dog.name) # 输出: 旺财
my_dog.bark() # 输出: 汪汪汪!
print(my_dog.description()) # 输出: 旺财是一只中华田园犬,今年3岁了。
“`
我们用 Dog("旺财", "中华田园犬", 3)
创建了一个 Dog
类的实例,并赋值给变量 my_dog
。这个过程就好像,我们根据图纸(Dog类),造出了一只真实的狗(my_dog实例)。然后,我们就可以通过 my_dog.name
来访问狗的名字,通过 my_dog.bark()
来让狗叫。
说点更深入的:
继承是面向对象编程的三大特性之一(另外两个是封装和多态)。想象一下,如果你想定义一个“会飞的狗”的类,难道要把所有关于狗的属性和方法都重新写一遍吗?当然不用!我们可以让“会飞的狗”类继承“狗”类。
“`python
class FlyingDog(Dog):
def init(self, name, breed, age, wingspan):
super().init(name, breed, age) # 调用父类的构造函数
self.wingspan = wingspan
def fly(self):
print(f"{self.name}展开{self.wingspan}米的翅膀,飞起来了!")
super_dog = FlyingDog(“超狗”, “拉布拉多”, 5, 2)
print(super_dog.description()) # 输出: 超狗是一只拉布拉多,今年5岁了。
super_dog.fly() # 输出: 超狗展开2米的翅膀,飞起来了!
super_dog.bark() #输出: 汪汪汪!
“`
FlyingDog(Dog)
表示 FlyingDog
类继承自 Dog
类。super().__init__(name, breed, age)
调用了父类 Dog
的构造函数,这样 FlyingDog
就拥有了 Dog
类的所有属性和方法。我们只需要添加 FlyingDog
特有的属性和方法,比如 wingspan
和 fly
。
封装,简单来说,就是把数据和方法打包在一起,并控制外部对数据的访问。比如,我们不希望外部直接修改狗的年龄,而是希望通过一个特定的方法来修改。
“`python
class Dog:
def init(self, name, breed, age):
self.name = name
self.breed = breed
self.__age = age # 私有属性,以双下划线开头
def get_age(self):
return self.__age
def set_age(self, new_age):
if new_age > 0 and new_age < 20: # 年龄限制
self.__age = new_age
else:
print("年龄不合法!")
my_dog = Dog(“小黑”, “金毛”, 2)
print(my_dog.__age) # 会报错,因为__age是私有属性
print(my_dog.get_age()) # 2
my_dog.set_age(5)
print(my_dog.get_age()) # 5
my_dog.set_age(25) # 年龄不合法!
print(my_dog.get_age()) # 5 年龄没有被改变
“`
__age
是一个私有属性,以双下划线开头。外部无法直接访问私有属性,只能通过 get_age
和 set_age
方法来访问和修改。这样可以保证数据的安全性。
多态,是指允许不同类的对象对同一消息做出响应。比如,我们定义一个 Animal
类,它有一个 speak
方法,然后我们让 Dog
类和 Cat
类都继承自 Animal
类,并重写 speak
方法。
“`python
class Animal:
def speak(self):
print(“动物叫”)
class Dog(Animal):
def speak(self):
print(“汪汪汪!”)
class Cat(Animal):
def speak(self):
print(“喵喵喵!”)
animal = Animal()
dog = Dog()
cat = Cat()
animal.speak() # 输出: 动物叫
dog.speak() # 输出: 汪汪汪!
cat.speak() # 输出: 喵喵喵!
“`
可以看到,虽然 animal
、dog
和 cat
都是对象,但是它们调用 speak
方法时,产生了不同的行为。这就是多态。
其实,class 的用法远不止这些,比如还有静态方法、类方法、property 等等。但掌握了以上这些,你已经可以开始用 class 构建复杂的程序了。记住,多写代码,多实践,才能真正理解 class 的精髓。
评论(0)