Python基础(七)-类

面向对象编程是最有效的软件编写方法之一,在面向对象编程中的类可以模拟显示世界中的事物和情景,并基于这些类来创建对象,在类中定义对象的通用行为。

创建和使用类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 创建
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = age
self.color = 'yellow'

def sit(self):
"""模拟小狗被命令蹲下"""
print(self.name.title() + " is now sitting")
print("My dog's color is " + self.color)

def roll_over(self):
"""模拟小狗被命令打滚"""
print(self.name.title() + " rolled over!")

# 使用
my_dog= Dog('wangcai',3)
my_dog.sit()
print("My dog's name is " + my_dog.name.title() + ".")

# 输出结果
Wangcai is now sitting
My dog's color is yellow
My dog's name is Wangcai.
  • 方法__init__(),相当于构造方法,每次创建类都运行该方法,方法前后都有两个下划线,这是为了避免和普通方法名称发生冲突

  • 可以在__init__()中给属性默认值如:color被给定默认值为yellow

  • 方法sit()由于不需要其他参数,所以只传了一个实例类本身的形参self

  • 使用就是直接类名(参数),将结果给一个变量,通过该变量.方法名就能够调用类中的方法了。

  • 修改属性的值,可以通过实例直接修改、通过方法修改属性的值、通过方法对属性的值递增:如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 还是使用上面的例子

    # 1. 通过实例直接修改
    my_dog = Dog('wangcai',3)
    # 将年龄改为4
    my_dog.age = 4

    # 2. 通过方法修改属性的值
    # 在 Dog 类中声明一个方法 update_age(self, age)
    方法如下:
    def update_age(self, age):
    self.age = age
    使用:
    my_dog = Dog('wangcai',3)
    # 将年龄改为4
    my_dog.update_age(4)

    # 3. 通过方法对属性的值递增
    # 在 Dog 类中声明一个方法 increment_age(self, age)
    方法如下:
    def increment_age(self, age):
    self.age += age
    使用:
    my_dog = Dog('wangcai',3)
    # 将年龄改为4
    my_dog.increment_age(1)

继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 父类
class Car():
"""docstring for Car"""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year

def get_desc_name(self):
car_name = str(self.year) + ' ' + self.make + ' ' + self.model
print(car_name.title())

# 子类
class ElectricCar(Car):
"""docstring for ElectricCar"""
def __init__(self, arg):
super().__init__(self, make, model, year)
self.battery_size = 70

def desc_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery")

# 重写父类的方法
# def get_desc_name():
# print(" 2027 I want to buy tesla")
# 使用子类
my_tesla = ElectricCar('tesla', 'model s', 2017)
print(my_tesla.get_desc_name())
print(my_tasla.desc_battery())

# 输出结果是
2017 Tesla Model S
This car has a 70-kWh battery
  • 父类中和其他类一样,子类中的super().__init__(self, 父类 init 方法中的参数列表),这些参数必不可少。
  • def desc_battery(self) 是子类的方法,用于获取汽车电池
  • 如果将重写方法的注释打开,那么输出结果将覆盖父类中get_desc_name()的输出,结果如下:
1
2
2027 I want to buy tesla
This car has a 70-kWh battery

导入类

假如我们创建了Animal类( 文件名为animal ),类中含有sit()方法,想在Dog类中使用该方法,方式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# animal 文件名,Animal类名
from animal import Animal
animal0 = Animal()
animal0.sit() # 这样即可调用

# 如果想导入多个类可用逗号隔开,如下:
from animal import Animal, Peoson

# 导入整个模块
import animal

# 导入模块中的所有类
from animal import *
小额支持我写出更好的文章~