千锋 2019-10-28
# python 类语法 class def 函数名(参数):函数的关键字 # class 类名:类名的规范:数字字母下划线组成 不能以数字开头,首字母大写,驼峰命名 # 类属性:类中的变量值 # 类方法:类中的函数
例如:
class BoyFriend: # 类属性 height = 175 weight = 130 money = ‘5000w‘ # 类函数/方法 每个类方法参数都必须含有一个参数表示自身,一般用self表示 def cooking(self): # 会做饭 print("男朋友要会做饭") def earn(self): # 会挣钱 == def earn(a) print("男朋友月薪要2万")
# 实例/对象 具体的一个例子 类名() 实例具有类中的所有属性和方法的权限 实例调用方法 # 调用属性: 实例.属性名 # 调用方法/函数:实例.方法名() 以def开头
bf = BoyFriend() # 创建实例 bf.cooking() # 打印BoyFriend的cooking()方法 bf.earn() print(bf.money) # 打印类属性
例如:
class Teacher(): age = 23 name = ‘kite‘ def coding(self): # 实例方法 print("会自动化测试") def cooking(self): # 实例方法 print("会做饭") @classmethod #类方法 def swimming(cls): print("老师还要会游泳") @staticmethod # 静态方法 def sing(): print("老师还要会唱歌")
不同类方法实例化的区别:
# 类的方法: # (1)实例方法 ---self:实例本身 只能实例来调用,才能调用方法 teacher = Teacher() # 隐身的传递 # a. teacher.cooking() # b.等效于a. Teacher.cooking(teacher) # 显示的传递 # (2) 类方法:@classmethod 创建实例与否,均可以调用方法 Teacher.swimming() # 未创建实例,调用方法 teacher.swimming()# 创建了实例,调用方法 # (3) 静态方法 @ staticmethod 创建实例与否,均可以调用方法 Teacher.sing() # 未创建实例,调用方法 teacher.sing()# 创建了实例,调用方法
总结 # 同:实例方法self, 类方法cls,静态方法(普通方法) 实例和类名都可以直接调用 # 不同:静态方法和类方法不可以调用类中的属性值, 如果需要参数,需自己传递参数 # 什么时候定义静态和类方法 ? 当某个函数与其他的类函数、类属性无任何关联时
# 初始化函数 class LemonTeacher: # 初始化方法(属于实例方法),一般不传动态参数和关键字参数,没有return返回值 # 其他方法调用初始化属性:self.属性名 def __init__(self,name,height,age=23): self.name = name self.age = age self.height = 180 def coding(self): # 实例方法 print("会自动化测试") def cooking(self,*args): # 实例方法 # print("会做饭") for item in args: print(self.name + ‘会做{0}‘.format(item)) def teacher_info(self,*args): self.cooking(*args) # 参数动态化 # self.cooking(‘海鲜大餐‘,‘蛤蜊汤‘) # 调用其他方法 print("{0}老师,今年{1}岁,身高{2},可以嫁人了!".format(self.name,self.age,self.height)) @classmethod #类方法 def swimming(cls): print("老师还要会游泳") @staticmethod # 静态方法 def sing(): print("老师还要会唱歌") # 初始化方法 t1 = LemonTeacher(‘kite‘,18) t2 = LemonTeacher(‘shiguang‘,18) t3 = LemonTeacher(‘lyb‘,18) # 调用方法 t1.swimming() t2.cooking() t3.coding() # 总结 # 什么时候用初始化方法? 想用就用 如果某个属性值是多个函数共用的,就可以用初始化函数 t1.cooking(‘蛋炒饭‘,‘西红柿炒蛋‘) t1.teacher_info() t2.teacher_info(‘fish‘,‘shrimp‘)