#coding:utf-8
#函数,模块,模块属性__name__
#注意:函数和调用参数要对象,导入执行,解释执行
# def func(name):
# print('我喜欢%s'%name)
# if __name__=='__main__':#入口 #如果由解释器解释执行当前模块
# func()
# else:#而是由其他导入执行
# print('被其他模块导入执行')
#type
print(type(99)==int)
#输出True
print(type('ben')==str)
#输出True
print(type(88)==type('23'))
#输出False
def fun():
print('110')
import types
print(type(fun)==types.FunctionType) #是不是函数(自定义的)
#输出True
print(type(fun)==types.BuiltinFunctionType)#是不是内置函数(系统的)
#输出False
print(type([x for x in range(22)])==list) #list推到式子
#输出True
print(type(x for x in range(22))==list) #
#输出False
print(type(x for x in range(22))==types.GeneratorType) #生成器
#输出True
#匿名函数 type内置,types是块函数
print(type(lambda x:x*2)==types.LambdaType)
#输出True
#面向对象编程
#自定义类 class关键字
#Python3.x自定义()参数默认留空--->新式类(自动集成对象的基类(超类))object
#__init__,具有特殊含义
#类里面定义函数(实例方法--->由实例对象去掉用的方法)
class Student():
#实例对象创建之后初始化数据
def __init__(self,name,id,age): #self 指向当前实例对象本身
print('正在初始化')
self.name=name
self.id=id
self.age=age
def __del__(self):#析构函数(自动调用函数)
print('Student中的%s正在被销毁'%self.name)
def get_name(self):
print(self.name)
@classmethod #类方法
def cls_fun(cls):
print('这是类方法')
print(cls)
@staticmethod #静态方法
def start_up():
print('静态方法')
#制造对象
stu=Student('lsy',22,12)# 构建实例对象
stu.get_name() #实例方法
stu.cls_fun() #类方法
stu.start_up() #静态方法
#类对象
Student.cls_fun()
Student.start_up()
#Student.get_name() #如果没有创建实例,则会报错(实例方法必须创建实例)
#静态方法直接类名,静态方法()
#__函数名称__特殊含义的函数
# class Person():
# def __init__(self,name,age):
# self.name=name
# self.age=age
# def __call__(self,*args,**kwargs):
# print('当前对象被调用')
# return self.name
#
# p1=Person('王妃',11) #p1是创建实例对象本身
# print(p1())
# class Person():
# def __new__(cls, *args, **kwargs):
# print('构造函数在初始化之前执行')
# return super(Person,self).__new__(cls)
# def __init__(self,name,age):
# self.name=name
# self.age=age
# print('初始化函数是在构造函数之后执行 ')
#
# p1=Person('李大兵',12) #创建一个实例对象
#访问作用域
#__name__(具有特殊含义)
# class Person():
# _min=10 #保护变量
# __max=99 #私有变量
#
# def __init__(self,name,age):
# self.name=name
# self.age=age
# def __work(self):
# print('我是私有方法')
#
#
# class Boy(Person):
# def __init__(self,name,age,sex):
# super(Boy,self).__init__(name,age)
# self.sex=sex
#
#
# a_person=Person('tom',99)
# b_boy=Boy('lucy','11',1)
#
# print(Person._min)
#print(Person.__max) #双下划线__属于私有变量(只能在当前类内部使用)
#继承和复写
# class Person():
# def sleep(self):
# print('Person正在睡觉')
#
# class Boy(Person):
# def sleep(self):
# print('boy正在睡觉')
# def play_game(self):
# print('boy正在睡觉')
#
# p=Person()
# b=Boy()
# p.sleep()
# #输出 Person正在睡觉
# b.sleep()
# #输出 boy正在睡觉
# b.play_game()
# #输出 boy正在睡觉
#
# print(isinstance(p,Person))
# #输出True
# print(isinstance(b,Boy))
# #输出True
# print(isinstance(b,Person))
# #输出True
#print(isinstance(p,Boy))
#输出False
#多态
# class Person(): #父类
# def sleep(self):
# print('Person正在睡觉')
#
# class Boy(Person):#子类
# def sleep(self):
# print('boy正在睡觉')
# def play_game(self):
# print('boy正在睡觉')
#非类里面的函数(模块的全局函数)
# def show(p):
# p.sleep()
#
# p=Person()
# b=Boy()
# show(p)
#输出 Person正在睡觉
#show(b)
#输出 boy正在睡觉
#鸭子形态
class Person():
def sleep(self):
print('Person正在睡觉')
class Boy():
def sleep(self):
print('boy正在睡觉')
def play_game(self):
print('boy正在睡觉')
def show(p):
p.sleep()
p=Person()
b=Boy()
show(p)
#输出 Person正在睡觉
show(b)
#输出 boy正在睡觉
#没有集成体系关系,表现多种形态
#print(Student.__class__.__bases__)
#调用创建实例对象
#s1=Student('ben',1,22) #创建实例对象--->传递参数(参数由谁决定)--->初始化函数
#s1.get_name()
#输出
# 正在初始化
# ben
# ben正在被销毁
#代码执行完毕--->自动调用__del__()---->销毁对象
#类变量和实例变量
# class Person():
# age=19
# def __init__(self,age):
# self.age=age
#
# personal1=Person(22)
#print(type(personal1))
#输出<type 'instance'>
#print(Person.age)
#输出19
# print(personal1.age)
#输出22
#注意点:
#关键字 class
#类名(第一个字母大小)
#类名()--->参数
#新试类和经典类
#Python2
# class MyClass(): #经典类
# pass
# class Student(object): #新式类
# pass
#Python3---->
# class Student(): #父类留空---->默认继承object对象()
# pass
#类模型里面self