文章目录




一、创建类

1.1 创建类

class Dog():
"""创建一个Dog类"""

def __init__(self, name, age): # 构造函数
self.name = name
self.age = age

def sit(self): # 定义了一个sit()方法
"""模拟小狗命令时蹲下"""
print(self.name.title() + "is now sitting.")

def roll_over(self): # 定义一个roll_over()方法
"""模拟小狗被命令打滚"""
print(self.name.title() + "rolled over!")
__init__()是构造方法,开头和末尾各有两个下划线,这是一种约定,用于避免默认方法与普通方法发生名称冲突。  

Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

1.2 给属性指定默认值

class Dog():
"""创建一个Dog类"""

def __init__(self, name, age): # 构造函数
"""初始化属性name和age"""
self.name = name
self.age = age
self.color = 'black' # 给属性指定默认值

def sit(self): # 定义一个sit()方法
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")

def roll_over(self): # 定义一个roll_over()方法
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")

二、创建实例

2.1 访问属性和方法

# 访问实例的属性和方法都使用句点表示法。
# 下面来创建一个表示特定小狗的实例:
my_dog = Dog('willie', 6)

# 访问属性
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog's is " + str(my_dog.age) + " years old.")

# 调用方法
my_dog.sit()
My dog's name is Willie.
My dog's is 6 years old.
Willie is now sitting.

2.2 修改属性的值

直接修改属性的值

my_dog = Dog('willie', 6)
my_dog.age = 12 # 修改age属性值
print("My dog's is " + str(my_dog.age) + " years old.")
My dog's is 12 years old.

通过方法修改属性的值

class Dog():
"""创建一个Dog类"""

def __init__(self, name, age): # 构造函数
"""初始化属性name和age"""
self.name = name
self.age = age
self.color = 'black' # 给属性指定默认值

def sit(self): # 定义一个sit()方法
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")

def roll_over(self): # 定义一个roll_over()方法
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")

def setAge(self, age):
self.age = age

my_dog = Dog('willie', 6)
my_dog.setAge(15)
print("My dog's is " + str(my_dog.age) + " years old.")
My dog's is 15 years old.

三、继承

3.1、Python继承的语法

# 示例:
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
return long_name.title()

def read_odometer(self): # 打印汽车的里程
print("This car has " + str(self.odometer_reading) + " miles on it.")

def update_odometer(self, mileage): # 更新汽车的里程
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")

def increment_odometer(self, miles): # 增加汽车里程
self.odometer_reading += miles

class ElectricCar(Car): # 必须在括号内指定父类的名称
"""电动汽车的独特之处"""

def __init__(self, make, model, year): # 接受创建Car实例所需的信息
"""初始化父类的属性"""
super().__init__(make, model, year) # 帮助Python将父类和子类关联起来
self.battery_size = 70 # 给子类定义新属性

my_tesla = ElectricCar("tesla", "model s", 2016)
print(my_tesla.get_descriptive_name())
2016 Tesla Model S
定义子类时,必须在括号内指定父类的名称。

子类的方法__init__()接受创建Car实例所需的信息。

super()是一个特殊函数,帮助Python将父类和子类关联起来,让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。

另外,上面还为子类添加了新属性battery_size。

3.2、重写父类方法

# 示例:
class ElectricCar(Car): # 必须在括号内指定父类的名称
"""电动汽车的独特之处"""
def __init__(self, make, model, year): # 接受创建Car实例所需的信息
"""初始化父类的属性"""
super().__init__(make, model, year) # 帮助Python将父类和子类关联起来
self.battery_size = 70 # 给子类定义新属性

def get_descriptive_name(self): # 重写父类的方法
long_name = str(self.year) + ' ' + self.make + ' ' + self.model + ' ' + str(self.battery_size)
return long_name.title()

my_tesla = ElectricCar("tesla", "model s", 2016)
print(my_tesla.get_descriptive_name())
2016 Tesla Model S 70

这里重写了父类的get_descriptive_name()方法,所以子类调用该方法时,Python将忽略Car类中的get_descriptive_name()方法。

3.3、将实例用作属性(组合)

# 示例:
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""

def __init__(self, battery_size=70):
"""初始化电瓶的属性"""
self.battery_size = battery_size

def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kwh battery.")

class ElectricCar(Car): # 必须在括号内指定父类的名称
"""电动汽车的独特之处"""

def __init__(self, make, model, year): # 接受创建Car实例所需的信息
"""初始化父类的属性"""
super().__init__(make, model, year) # 帮助Python将父类和子类关联起来
self.battery = Battery() # 将实例用作属性

my_tesla = ElectricCar("tesla", "model s", 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
2016 Tesla Model S
This car has a 70-kwh battery.

四、模块化

4.1、导入单个类

from car import Car    # 从car.py文件中导入Car类

4.2、从一个模块中导入多个类

from car import Car, ElectricCar    # 从car.py文件中导入Car类和ElectricCar类

4.3、导入模块中的所有类

from car import *    # 导入car.py文件中的所有类