在面向对象编程中,你编写表示现实世界中的事物和情景的类,根据类来创建对象被称为实例化。在编写类时,你定义一大类对象都有的通用行为,每个对象都自动具备这种通用行为。在定义类时,函数都称为方法
创建类和实例1
class Restaurant: # 在这里,我们定义了一个名为Restaurant的类,根据约定,在Python中,首字母为大写的名称指的就是类
"""一次模式食物店的简单尝试""" # 我们编写了简单的文档字符串,对这个类的功能进行了简单的描述
def __init__(self, restaurant_name, cuisine_type): # 设定了三个形参,self必不可少,还必须位于其他形参的前面,此处的方法_init_()是一个特殊的方法,在这个方法的名称中,开头和结尾各有两个下划线,这是一种约定,旨在避免python默认方法与普通方法发生名称冲突
"""初始化属性的restaurant_name和cuisine_type"""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
# 上面的两个变量都有前缀self,以self为前缀的变量都可供类中所有的方法使用。我们还可以通过类的任何实例来访问这些变量。self.restaurant_name = restaurant_name获取存储在形参restaurant_name的值,并将其存储在变量restaurant_name中,然后该变量被关联到当前创建的实例。self.cuisine_type = cuisine_type的作用与此类似
def describe_restaurant(self):
"""饭店的简单简介"""
print("\nThe name of the restaurant is: " + self.restaurant_name)
print("The food is the restaurant is: " + self.cuisine_type)
def open_restaurant(self):
"""饭店的经营时间"""
print(self.restaurant_name.title() + " is opening for 24 hours.")
"""创建了一个实例,通常认为首写字母大写的名称指的是类,而小写的名称指的是根据类创建的实例"""
restaurant = Restaurant("hai_di_tao", "hotpot")
"""根据类创建实例后,要调用类的方法时,可指定实例的名称和要调用的方法,并用句点分隔它们"""
restaurant.describe_restaurant()
restaurant.open_restaurant()
"""创建了另一个实例"""
restaurant = Restaurant("guangzhou_jiu_jia", "canton_food")
restaurant.describe_restaurant()
restaurant.open_restaurant()
///运行结果为:
The name of the restaurant is: hai_di_tao
The food is the restaurant is: hotpot
Hai_Di_Tao is opening for 24 hours.
The name of the restaurant is: guangzhou_jiu_jia
The food is the restaurant is: canton_food
Guangzhou_Jiu_Jia is opening for 24 hours.
给属性指定默认值
在有些情况下,可以在方法_init_() 内给某个属性指初始值,如果你对某个属性这样做了,就无需包含为它提供初始值的形参,如下
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 # 设定odometer_reading属性的初始值为o,
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
print(long_name.title())
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', 'a4', 2016)
my_new_car.get_descriptive_name()
my_new_car.read_odometer()
//运行结果为:
2016 Audi a4
This car has 0 miles on it.
修改属性的值
以三种不同的方式修改属性的值:最简单的方式就是直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值)
1. 直接修改属性的值
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 # 设定的默认值
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
print(long_name.title())
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', 'a4', 2016)
my_new_car.odometer_reading = 23 # 这行代码让python在实例my_new_car中找到属性odometer_reading,并将该属性的值设置为23
my_new_car.read_odometer()
//运行的结果为:
This car has 23 miles on it.
2. 通过方法修改属性的值
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
print(long_name.title())
"""添加了方法update_odometer(), 这个方法接受一个里程值,并将其存储到self.odometer_reading中"""
def update_odometer(self, mileage):
self.odometer_reading = mileage
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', 'a4', 2016)
my_new_car.update_odometer(23) # 这行代码调用了update_odometer(),并向它提供了实参23(该实参对应于方法定义中的形参mileage)
my_new_car.read_odometer()
// 运行的结果:
This car has 23 miles on it.
3. 通过方法对属性的值进行递增
有时候只需要给属性值递增特定的量,而不是将其设置为全新的值
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
print(long_name.title())
def update_odometer(self, mileage):
self.odometer_reading = mileage
def increment_odometer(self, miles):
self.odometer_reading += miles # 将里程表读数增加指定的量
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', 'a4', 2016)
my_new_car.update_odometer(2300)
my_new_car.read_odometer()
my_new_car.increment_odometer(100)
my_new_car.read_odometer()
// 运行的结果:
This car has 2300 miles on it.
This car has 2400 miles on it.