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
...
__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
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
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") # <-- 不显式提供 balanceprint(cust.name) print(cust.balance) # <-- 仍会创建该属性
The __init__ method was called
Lara de Silva
0
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)
__init__() 中初始化属性__init__() 中初始化属性类用 CamelCase,函数和属性用 lower_snake_case
__init__() 中初始化属性类用 CamelCase,函数和属性用 lower_snake_case
self 为 selfclass MyClass:
# 这样可行但不推荐
def my_method(kitty, attr):
kitty.attr = attr
__init__() 中初始化属性类用 CamelCase,函数和属性用 lower_snake_case
self 就是 selfclass MyClass:
"""此类无实际功能"""
pass
Python 面向对象编程