类
判断是否为子类
isinstance(对象,classinfo )
如果object参数是classinfo 参数的实例,或者是(直接,间接或虚拟)子类的实例,则返回true 。如果object不是给定类型的对象,则该函数始终返回false。如果classinfo是类型对象的元组(或递归,其他此类元组),则如果object是任何类型的实例,则返回true 。如果classinfo不是类型和类型元组的类型或元组,TypeError则会引发异常。
issubclass(class,classinfo )
如果class是classinfo的子类(直接,间接或虚拟),则返回true 。类被认为是其自身的子类。classinfo可以是类对象的元组,在这种情况下,将检查classinfo中的每个条目。在任何其他情况下,都会引发异常。TypeError
import math class calc(): pi=3.1415926 def circle_area(self,r): s=self.pi*math.pow(r,2) print(s) def calc(self): a, b, c = 2, 3, 4 d = a + b + c print(d) c=calc() c.circle_area(10) class calcw(calc): def div(self,a,b): if b!=0: c=a/b else: print("被除数不能为零") return c print(issubclass(calcw,calc)) c=calc() print(isinstance(c,calc))
多重继承
class xiaoxiaozhang(xiaozhang,xiaohong): def say(): print('我要上学')
继承
class xiaoxiaozhang(xiaozhang): def say(): print('我要上学')
类变量 定义在类里面的变量 下面的pi就是类变量
import math class calc(): pi=3.1415926 def circle_area(self,r): s=self.pi*math.pow(r,2) print(s) c=calc() c.circle_area(10)
局部变量 定义在方法里面的变量 calc方法中的a、b、c就是局部变量
import math class calc(): pi=3.1415926 def circle_area(self,r): s=self.pi*math.pow(r,2) print(s) def calc(self): a, b, c = 2, 3, 4 d = a + b + c print(d) c=calc() c.circle_area(10)
构造函数与析构函数
__init__ 和__del__
__init__是对变量的初始化,指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法,未手动添加构造函数时,系统会默认提供一个无参的构造函数。
__del__
1、程序执行结束,会自动调用析构函数
2、使用del 删除对象的时候,系统会自动调用析构函数
3、如果没写析构函数,当符合析构函数调用的契机时,系统会自动调用父类的析构函数
class Person(): def run(self): print("run") def eat(self, food): print("eat "+food) def __init__(self, name, age, height, weight): self.name = name self.age = age self.height = height self.weight = weight def __del__(self): print("析构函数被调用了") per = Person("hanmeimei", 20, 170, 55) #释放对象 del per #注意:对象释放后就不能再进行访问了 #在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费 #其实就是作用域的问题 def func(): 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)
输出
<generator object <genexpr> at 0x00000243D6DA6B48>
先要输出内容可以进行遍历打印或者转成list
ge=(a for a in range(1,100,2) if a%2!=0) print(ge) li=list(ge) print(li)