类
判断是否为子类
isinstance(对象,classinfo )
如果object参数是classinfo 参数的实例,或者是(直接,间接或虚拟)子类的实例,则返回true 。如果object不是给定类型的对象,则该函数始终返回false。如果classinfo是类型对象的元组(或递归,其他此类元组),则如果object是任何类型的实例,则返回true 。如果classinfo不是类型和类型元组的类型或元组,TypeError则会引发异常。
issubclass(class,classinfo )
如果class是classinfo的子类(直接,间接或虚拟),则返回true 。类被认为是其自身的子类。classinfo可以是类对象的元组,在这种情况下,将检查classinfo中的每个条目。在任何其他情况下,都会引发异常。TypeError
importmathclasscalc():
pi=3.1415926
defcircle_area(self,r):
s=self.pi*math.pow(r,2)print(s)defcalc(self):
a, b, c= 2, 3, 4d= a + b +cprint(d)
c=calc()
c.circle_area(10)classcalcw(calc):defdiv(self,a,b):if b!=0:
c=a/belse:print("被除数不能为零")returncprint(issubclass(calcw,calc))
c=calc()print(isinstance(c,calc))
多重继承
classxiaoxiaozhang(xiaozhang,xiaohong):defsay():print('我要上学')
继承
classxiaoxiaozhang(xiaozhang):defsay():print('我要上学')
类变量 定义在类里面的变量 下面的pi就是类变量
importmathclasscalc():
pi=3.1415926
defcircle_area(self,r):
s=self.pi*math.pow(r,2)print(s)
c=calc()
c.circle_area(10)
局部变量 定义在方法里面的变量 calc方法中的a、b、c就是局部变量
importmathclasscalc():
pi=3.1415926
defcircle_area(self,r):
s=self.pi*math.pow(r,2)print(s)defcalc(self):
a, b, c= 2, 3, 4d= a + b +cprint(d)
c=calc()
c.circle_area(10)
构造函数与析构函数
__init__ 和__del__
__init__是对变量的初始化,指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法,未手动添加构造函数时,系统会默认提供一个无参的构造函数。
__del__
1、程序执行结束,会自动调用析构函数
2、使用del 删除对象的时候,系统会自动调用析构函数
3、如果没写析构函数,当符合析构函数调用的契机时,系统会自动调用父类的析构函数
classPerson():defrun(self):print("run")defeat(self, food):print("eat"+food)def __init__(self, name, age, height, weight):
self.name=name
self.age=age
self.height=height
self.weight=weightdef __del__(self):print("析构函数被调用了")
per= Person("hanmeimei", 20, 170, 55)#释放对象
delper#注意:对象释放后就不能再进行访问了
#在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费#其实就是作用域的问题
deffunc():
per2= Person("aa", 1, 1, 1)
func()
输出:
析构函数被调用了
析构函数被调用了
私有变量、保护变量、全局变量
变量前面在加一个下划线成为保护变量 作用域限于本类和子类
变量前面加两个下划线叫私有变量 作用域限于本类
各种推导式
列表推导式
a_list=[a for a in range(0,100,2) if a%2==0 ]
字典推导式
words='letter'a_dict={word:word.count(word) for word in words}
集合推导式
squared = {x**2 for x in [1, 1, 2]}
生成器推导式
ge=(a for a in range(1,100,2) if a%2!=0)print(ge)
输出
at 0x00000243D6DA6B48>
先要输出内容可以进行遍历打印或者转成list
ge=(a for a in range(1,100,2) if a%2!=0)print(ge)
li=list(ge)print(li)