面向对象编程
定义类:clss
类多继承,其中类里面以__开始方法都是内置的来自于父类
注意:构造方法里面的self与java中的this一样,但是this是可以不写,self不同必须存在
如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性
class person:
def __init__(self,first_name,last_name):
self.__first_name=first_name
self.__last_name=last_name
def show(self,s): #this show(s){}
print(self.__first_name)
print(self.__last_name)
print(self.full_name,s) #print(propterty(full_name),s)
@property
def full_name(self):
return self.__first_name+'.'+self.__last_name
@full_name.setter
def full_name(self,full_name):
self.__first_name=full_name[:full_name.index(".")]
self.__last_name=full_name[full_name.index(".")+1:]
p=person("wang","wu")
p.show("haha")
print(p.full_name)
p.full_name="li.si
"
p.show("heihei")
函数:独立定义,独立调用
def foo():
pass
foo()
方法:依赖定义,依赖调用
方法依赖于类定义,类名调用
A
def foo()
pass
A().foo()
学习函数
语法
def 函数名称(参数):
#函数体
参数:普通
关键参数
动态参数一个星号,会把所有参数转为tupe,两个星号会把参数转为dic
def f1(**kwargs): print(kwargs,type(kwargs)) dic = {"k1":123} f1(k1 = dic) #执行结果为{'k1': {'k1': 123}} <class 'dict'> f1(**dic) #执行结果为{'k1': 123} <class 'dict'>
变量作用域
全局 本地 闭包 局部
全局:global
一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。
全局变量所有作用域都可读,局部变量只能在本函数可读
函数在读取变量时,优先读取函数本身自有的局部变量,再去读全局变量
全局变量默认可读,如果需要改变全局变量的值,需要在函数内部使用global定义
name = 'zhangsan' #全局变量 def f1(): age = 18 #局部变量 print(age,name) def f2(): age=19 #局部变量 print(age,name) f1() f2() >>> 18 zhangsan 19 zhangsan
装饰
#火锅
#麻辣锅底 金品肥牛 极品羊肉 什么蔬菜双拼
装饰用@
import types
def jingpinfeiniu(n):
print("金品肥牛:¥38")
if type(n) == types.FunctionType:
return n()+38
return n+38
def shucai(n):
print("什么蔬菜双拼:$7")
if type(n) == types.FunctionType:
return n()+7
return n+7
@shucai
@jingpinfeiniu
def mala():
print("麻辣锅底:$12")
return 12
#shcai(jingpinfeiniu(mala))
#qian=shucai(jingpinfeiniu(mala()))
print("共消费:"+str(mala))