面向对象
现实事物 -抽象-> 类(模板) -具体-> 对象
# 老婆类 class Wife: # 数据 def __init__(self, name, height=160, face_score=90): self.name = name self.height = height self.face_score = face_score # 行为 def play(self): print(self.name, "在玩耍") # 创建对象(调用__init__函数) jn = Wife("建宁", 170, 96) # 读取对象的颜值 print(jn.face_score) # 调用对象的行为 jn.play() # play(jn)
实例成员
实例变量:对象的数据
每个对象存储一份实例方法:对象的行为
面向过程
name = "建宁" age = 26 def print_self(): print("我叫:", name, "今年", age, "岁了") print_self()
面向对象
写法1:class Wife: def __init__(self, name="", age=0): # 创建实例变量 self.name = name self.age = age # 实例方法:操作实例变量 def print_self(self): print("我叫:", self.name, "今年", self.age, "岁了") jn = Wife("建宁") # 读取实例变量 print(jn.name) # 该变量存储的是对象所有数据成员 # {'name': '建宁'} print(jn.__dict__) # jn.__dict__["name"] = "建宁公主" jn.name = "建宁公主" print(jn.name)
写法2: 不建议(应该在类内创建实例变量)
class Wife: pass jn = Wife() # 创建实例变量 jn.name = "建宁" # 读取实例变量 print(jn.name)
写法3:不建议(应该在构造函数中创建)
""" class Wife: def set_name(self, name): self.name = name jn = Wife() jn.set_name("建宁") # 读取实例变量 print(jn.name) """ ak = Wife("阿柯", 25) ak.print_self() # print_self(ak) # 如果通过类名调用实例方法,必须手动传递对象地址 Wife.print_self(ak)
类成员
类变量
类方法
class ICBC: # 类变量:总行的数据 total_money = 1000000 # 类方法:操作类变量 @classmethod def print_total_money(cls): # cls 与 类名 相同 # print(ICBC.total_money) print("总行有%d元" % cls.total_money) def __init__(self, name="", money=0): # 构造函数执行,意味着创建了一家支行 # 实例变量:某一支行的数据 self.name = name self.money = money # 总行的钱减少 ICBC.total_money -= money tiantan = ICBC("天坛支行", 100000) # print(ICBC.total_money) ICBC.print_total_money() taoranting = ICBC("陶然亭支行", 200000) # print(ICBC.total_money) ICBC.print_total_money()
# 全局变量:在文件中创建,全文件可用. data01 = 10 def func01(): # 局部变量:在函数中创建,函数内部可用. data02 = 20 class MyClass: # 类变量:在类中创建,通过类名访问 data04 = 40 def __init__(self): # 实例变量:在构造函数中通过对象创建,通过对象访问. self.data03 = 30 m01 = MyClass() print(m01.data03)
实例成员 与 类成员 class 类名: 变量名1 = 数据 # 创建类变量 def __init__(self): self.变量名2 = 数据 # 创建实例变量 @classmethod # 类方法:操作类变量 def 方法名1(cls): 通过cls操作类变量 不能操作实例成员 def 方法名2(self): # 实例方法:操作实例变量 通过self操作实例变量 能操作类成员 访问类成员 类名.变量名1 类名.方法名1() 访问对象成员 对象 = 类名() 对象.变量名1 对象.方法名1()