继承:代码复用,默认类object
class 子类(父类1,父类2,...):
def __init__(self,形参)
父类.__init__(self,形参) 带入父类属性
继承:代码复用,默认类object
class 子类(父类1,父类2,...):
def __init__(self,形参)
父类.__init__(self,形参) 带入父类属性
@property
把类内方法变成属性
常规调用 s.function()
@property后调用 s.function
私有方法
定义
def __function(self):
调用
s._classname__function()
私有属性
定义
self.__age=age
间接访问
s._Classname__age
python中方法/函数没有重载
同名函数,后者覆盖前者
class 外可以用新函数覆盖class 内的方法函数
覆盖新函数要加第一位形参self
class.函数名=类外函数名
__call__()方法调用对象
def __call__(self,形参)
析构函数__del__(self)
用垃圾回收机制销毁0引用对象,一般不需重写
class person:
def __del__(self):
print("obj deleted")
类方法,只操作类属性,不涉及实例属性
@classmethod
def xxx(cls): xxx函数名
类名.xxx()
静态方法,应用于类内,可以强行调用类属性
@staticmethod
def 静态方法名(形参列表)
不能调用实例属性,方法
class studnet:
company="sxt" 类属性
count=0 类属性
def __init__(self, name, age): 实例属性
self.a=name
self.b=age
student.count+=1 调用计数器
def sayage(self): 实例方法
print(age)
print(studnet.count,student.company) 实例方法中调用类属性
类对象创建
class student:
def __init__(self,name,age):
self.a= name
self.b=age
def sayage(self):
print(self.age)
实例方法:
def xxx(self,形参1) xxx为函数名称
解释器调用为
class名.实例方法名(变量名)
Studnet.sayscore(S2)
isinstance(变量,class)判断变量是否是指定的class
类:产生对象的模具(也是对象),包含方法(函数)和属性(值)
def __init__ (self,参数1,参数2) 双下划线定义属性值
class Xxx:
对象:数据+处理方法(函数)
变量查找顺序
local内置函数-enclosed外部函数-global模块内-built in python
nonlocal_变量
在内部函数修改外部函数里变量
def outer():
b= 10
def inner():
nonlocal b
b=2
inner() 内部函数被激活
print(b) 新的b只能在outer()里使用
嵌套函数
def outer1():
print()
def inner2():
print()
inner2() 内部函数须在outer里调用
递归函数
eval()函数,将字符串当代码执行
s="print("a+b")"
eval(s)
lambda生成简单匿名函数
f=lambda a,b,c: a+b+c
f(2,3,4)
def f1(a,b,*c) *c代表元组可以接受多个参数
def f1(a,b,**c) **c代表元组可以接受多个参数
可变参数之后的参数需要强制命名