类结构:__init__ 构造函数

Python 面向对象编程

Alex Yarosh

Content Quality Analyst @ 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__()
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- 创建 .name 属性并设为参数 name
        print("The __init__ method was called")

cust = Customer("Lara de Silva") #<--- 隐式调用 __init__ print(cust.name)
The __init__ method was called
Lara de Silva
Python 面向对象编程
class Customer:
       def __init__(self, name, balance):  # <-- 新增 balance 参数

self.name = name self.balance = balance # <-- 新增 balance 属性 print("The __init__ method was called")
cust = Customer("Lara de Silva", 1000) # <-- 调用 __init__ print(cust.name) print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Python 面向对象编程
class Customer:
       def __init__(self, name, balance=0):  #<-- 为 balance 设默认值

self.name = name self.balance = balance print("The __init__ method was called")
cust = Customer("Lara de Silva") # <-- 不显式提供 balance
print(cust.name) print(cust.balance) # <-- 仍会创建该属性
The __init__ method was called
Lara de Silva
0
Python 面向对象编程

方法中创建属性

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

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MyClass()
obj.my_method1(val1) # <-- 创建 attr1
obj.my_method2(val2) # <-- 创建 attr2

在构造函数中创建属性

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

# 一次性创建所有属性 obj = MyClass(val1, val2)
  • 更容易掌握所有属性
  • 对象创建时即创建属性
  • 代码更易用、易维护
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(kitty, attr):
       kitty.attr = attr
Python 面向对象编程

最佳实践

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

类用 CamelCase,函数和属性用 lower_snake_case

3. self 就是 self
4. 使用文档字符串
class MyClass:
    """此类无实际功能"""
    pass
Python 面向对象编程

Passons à la pratique !

Python 面向对象编程

Preparing Video For Download...