python对象的基本概念
对象是python程序的基本单元,包含数据(属性)和行为(方法)。事实上,在python中,一切都是对象,如数字、字符串、列表、函数、模块,本质上都是对象。
对象有自身的特性,一是身份,可以通过函数id()获取,二是类型,可以通过函数tpye()获取,三是值,即对象存储的具体数据。
对象的创建和使用
我们通过类来创建对象。以下创建了一个狗(Dog)类,声明了狗的属性,即名字和年龄,然后使用一个方法bark定义了狗类的特定行为:吠。
class Dog:
def __init__(self, name, age):
self.name = name # 属性
self.age = age
def bark(self): # 方法
print(f"{self.name} is barking!")
实例化对象,也就是根据狗类创建某条具体的狗,而不再是概念化的狗这一类:
my_dog = Dog("大黄", 3)
这样一条3岁的名叫大黄的狗就出现了。
当我们需要知道大黄的名字的时候,就用这条具体的狗来询问它的名字,这就是属性的访问:
my_dog.name
当我们需要这条具体的狗做出行为“犬吠”的时候,就调用相应的方法:
my_dog.bark()
当我们不要这条狗了,也可以进行删除,python通过垃圾回收机制自动销毁不再使用的对象:
del my_dog
对象的特殊方法
构造函数,初始化对象属性,可以理解为对象的先天属性:
__init__
对象的字符串表示形式,可以使用print输出。
class Dog:
def __str__(self):
return f"Dog(name={self.name}, age={self.age})"
定义对象的相等性比较:
class Dog:
def __eq__(self, other):
return self.name == other.name and self.age == other.age
对象的继承和多态
子类继承父类的属性和方法
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def bark(self):
print("Dog barks")
在这里,父类是动物,子类是狗,class Dog(Animal)表示狗类继承了动物类,即它可以使用动物类下所有的方法和属性,这里即speak方法。
多态,即不同的子类对同一方法有不同的实现。
class Animal:
def speak(self):
print("Animal speaks")
class Cat(Animal):
def speak(self):
print("Cat meows")
class Dog(Animal):
def bark(self):
print("Dog barks")
animals = [Dog(), Cat()]
for animal in animals:
animal.speak()
以上代码,运行结果为:
Animal speaks
Cat meows
狗类继承了动物类,所以在调用animal.speak()方法时,自然调用到了动物类的speak方法。而虽然猫类继承自动物类,但它重写了动物类的speak方法,所以结果为:猫喵。
这就是不同的子类(狗类,猫类)对同一方法(speak)的不同实现,一个是重写,一个是继承。
对象的应用
一般应用于数据封装,提高代码的可维护性;用于模块化编程,便于扩展和复用;用于面向对象的编程,oop,利用继承和多态的特性构建复杂系统。