类结构:__init__ 构造函数

Python 面向对象编程入门

George Boorman

Curriculum Manager, DataCamp

方法与属性

  • 方法是类内的函数定义
  • 第一个参数为 self
  • 通过赋值定义属性
  • 在类中用 self.___ 引用属性
  • 调太多方法会难以维护!
class MyClass:
    # 类中的函数定义
    # 第一个参数是 self
    def my_method1(self, other_args...):
        # 在此编写逻辑

def my_method2(self, my_attr): # 通过赋值创建属性 self.my_attr = my_attr ...
Python 面向对象编程入门

构造函数

  • 创建对象时添加数据
  • 每次创建对象都会调用 构造函数 __init__()
    • __methodname__ 语法而自动调用
class Customer:
    def __init__(self, name):
        # 创建 .name 属性并设为 name 参数
        self.name = name
        print("The __init__ method was called")
Python 面向对象编程入门

构造函数

# __init__ 被隐式调用
cust = Customer("Lara de Silva")   
print(cust.name)
The __init__ method was called
Lara de Silva
Python 面向对象编程入门

方法中创建属性

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...

obj = MyClass() # 创建 attr1 obj.my_method1(val1) # 创建 attr2 obj.my_method2(val2)

在构造函数中创建属性

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# 一次性创建所有属性 obj = MyClass(val1, val2)
  • 通常应使用构造函数
  • 对象创建时即创建属性
  • 代码更易用、可维护
Python 面向对象编程入门

添加参数

class Customer:
    # 添加 balance 参数
    def __init__(self, name, balance): 

self.name = name # 添加 balance 属性 self.balance = balance print("The __init__ method was called")
Python 面向对象编程入门

添加形参

# 调用了 __init__
cust = Customer("Lara de Silva", 1000)
print(cust.name)
print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Python 面向对象编程入门

默认参数

class Customer:
    # 为 balance 设定默认值
    def __init__(self, name, balance=0):
        self.name = name
        # 赋值新属性
        self.balance = balance
        print("The __init__ method was called")
Python 面向对象编程入门

默认参数

# 不显式指定 balance
cust = Customer("Lara de Silva")

print(cust.name) # 仍会创建 balance 属性 print(cust.balance)
The __init__ method was called
Lara de Silva
0
Python 面向对象编程入门

最佳实践

1. 在 __init__() 中初始化属性
Python 面向对象编程入门

最佳实践

1. 在 __init__() 中初始化属性
2. 命名

类用 CamelCase,函数与属性用 lower_snake_case

Python 面向对象编程入门

最佳实践

1. 在 __init__() 中初始化属性
2. 命名

类用 CamelCase,函数与属性用 lower_snake_case

3. 保持 selfself
class MyClass:
    # 可行但不推荐
    def my_method(george, attr):
        george.attr = attr
Python 面向对象编程入门

最佳实践

1. 在 __init__() 中初始化属性
2. 命名

类用 CamelCase,函数与属性用 lower_snake_case

3. self 就是 self
4. 使用文档字符串(docstring)
class MyClass:
    """此类不执行任何操作"""
    pass
Python 面向对象编程入门

Passons à la pratique !

Python 面向对象编程入门

Preparing Video For Download...