在Python中,对象是由类创建的,它是类的实例。在Python中,类是一种定义,描述了可以从中创建对象的所有属性和方法。创建类是创建对象的蓝图。下面将从多个方面详细阐述Python中创建对象的蓝图。
一、类的定义
在Python中,可以使用
class MyClass: pass
上面的代码创建了一个名为MyClass的类,该类没有任何属性或方法。
类的方法可以分为两种:实例方法和类方法。实例方法需要创建类的实例,才能调用该方法。类方法无需实例,但仍然可以通过类调用。
下面的示例程序演示了类的定义和实例方法的使用:
class Car: def __init__(self,make,model): self.make = make self.model = model self.odometer_reading = 0 def get_descriptive_name(self): long_name = f"{self.make} {self.model}" return long_name.title() def read_odometer(self): print(f"This car has {self.odometer_reading} miles on it.") my_new_car = Car('audi','a4') print(my_new_car.get_descriptive_name()) my_new_car.read_odometer()
执行结果如下:
Audi A4 This car has 0 miles on it.
类Car有三个属性:make,model和odometer_reading。属性odometer_reading的默认值为0。类Car还有两个实例方法:get_descriptive_name和read_odometer。调用实例方法get_descriptive_name返回汽车的描述性名称,调用实例方法read_odometer来读取里程表读数。
二、继承
继承是面向对象编程中的一个重要概念。子类通过继承父类的方法和属性来实现自己的功能。在Python中,可以直接通过将父类作为参数传递给子类来实现继承。子类可以重写父类的方法,并添加自己的方法。
下面的示例程序演示了一个子类ElectricCar继承自父类Car的情况:
class Car: def __init__(self,make,model): self.make = make self.model = model self.odometer_reading = 0 def get_descriptive_name(self): long_name = f"{self.make} {self.model}" return long_name.title() def read_odometer(self): print(f"This car has {self.odometer_reading} miles on it.") class ElectricCar(Car): def __init__(self,make,model,year): super().__init__(make,model) self.battery_size = 75 self.year = year def describe_battery(self): print(f"This car has a {self.battery_size}-kWh battery.") my_tesla = ElectricCar('tesla','model s',2019) print(my_tesla.get_descriptive_name()) my_tesla.describe_battery()
执行结果如下:
Tesla Model S This car has a 75-kWh battery.
类ElectricCar继承自父类Car,子类中定义的方法describe_battery是父类中没有的方法。在子类ElectricCar的__init__方法中,通过super()函数调用了父类构造函数,以便初始化从父类继承过来的属性。
三、类的属性
在Python中,属性存储在实例中。有两种类型的属性:实例属性和类属性。实例属性是每个实例都有自己的属性,它们的值可能不同。类属性由所有实例共享,因此它们的值在所有实例中都相同。
下面的示例程序演示了类属性的创建和使用:
class Dog: number_of_legs = 4 def __init__(self,name,age): self.name = name self.age = age my_dog = Dog('Willie',6) your_dog = Dog('Lucy',3) print(my_dog.name + " has " + str(my_dog.number_of_legs) + " legs.") print(your_dog.name + " has " + str(your_dog.number_of_legs) + " legs.") print(Dog.number_of_legs)
执行结果如下:
Willie has 4 legs. Lucy has 4 legs. 4
类Dog有两个实例属性:name和age,它的类属性number_of_legs用于保存狗的腿数。在类Dog的定义中,number_of_legs被放在类的外面,表示这是一个类属性。通过调用类可以访问它的类属性。