python高级编程

本文详细介绍了Python中的高级特性,包括一切皆对象的概念,探讨了type、object和class的区别,讲解了Python内置对象的三大特征。重点解析了魔法方法的原理和常见类型,阐述了鸭子类型和抽象基类的应用。同时,讨论了isinstance与type的区别,类变量和对象变量的使用,以及属性封装和元类编程。最后,深入讨论了迭代器和生成器的工作机制,以及如何使用socket模拟HTTP请求。
摘要由CSDN通过智能技术生成

一。python中一切皆是对象

1.动态语言和静态语言的区别
java虽然也是面向对象,但是在其中有类和实例(对象)这两个对象
python是所有的都是对象,面向对象更加彻底
2.python中函数和类也是对象,属于python的一等公民,一等公民有这几个特权
可以赋值给一个变量
可以添加到集合对象中
可以作为参数传递给函数
可以当做函数的返回值

def ask(name="bobby"):#如果函数没有renturn,会默认返回None
	print(name)
class Person:
	def __init__(self):
		print("bobby1")
def print_type(item):
	print(type(item))

def decorator_fun():
	print("des start")
	return ask		#特等公民特权4
obj_list = []
obj_list.append(ask)
obj_list.append(Person) #一等公民特权2
for item in obj_list:
	print(type(item))
my_func = ask
my_func("bobby")
	

二.type,object,class的区别

#type–>int–>1
#type–>class–>obj
object是最顶层的基类,object的基类为空
type本身也是一个类,同时type也是一个对象
在这里插入图片描述

三. python中的内置对象【对象的三个特征(身份,类型,值)】

1.身份用id()查看
2.类型
None 全局只有一个
数值 int, float, complex, bool
迭代类型
序列类型 list, bytes, bytearray, memoryview(二进制序列), range, tuple, str, array
映射类型 dict
集合 set, frozenset
上下文管理类型 with语句
其他类型 模块类型,class和实例,函数类型,方法,代码类型,object对象,type类型,ellipsis类型(省略号),notimplemented类对象

python魔法方法

什么是魔法函数

1.以上下划线开头,以双下滑线结尾的 就是python中的魔法方法
2.魔法函数 可以在任何类中直接使用,用于增强。【for 会调用对量内部的 __getitem__魔法方法】
3.将一个类变为可以调用len方法的形式

class Company(object):
	def __init__(self,employee_list):
		self.employee = employee_list
	def __getitem__(self,item):
		return self.employee[item]
	def __len__(self):'
		return len(self.employee)

company = Company(["tom","bob","jane"])
company1 = company[:2]
pirnt(len(conpany))
for em in company1:
	print(em)

魔法函数有哪些

1.非数学运算
字符串表示 repr, str
集合,序列相关 len, getitem, setitem, delitem, contains
迭代相关 iter, next,
可调用 call
with上下文管理器 enter, exit,
数值转换 abs, bool, int, float, hash, index
元类相关 new, init,
属性相关 getattr, setattr, getattribute, setattribute, dir
属性描述符 get, set, delete
协程 await, aiter, anext, aenter, aexit
2.数学运算

 class MyVector(object):
   ...:     def __init__(self,x,y):
   ...:         self.x = x
   ...:         self.y = y
   ...:     def __add__(self,other_instance):
   ...:         re_vector = MyVector(self.x+other_instance.x,self.y+other_instance.y)
   ...:         return re_vector
   ...:     def __str__(self):
   ...:         return "x:{x},y:{y}".format(x=self.x,y=self.y)
In [3]: first_vec = MyVector(1,2)

In [4]: second_vec = MyVector(2,3)

In [5]: print(first_vec+second_vec)

四 鸭子类型

1.什么是鸭子类型

class Cat(object):
	def say(self):
		print('i an a cat')
class Dog(object):
	def say(self):
		print('i am a dog')
	def __getitem__(self,item):
		return "bobby"

class Company(object):
	def __init__(self,employee_list):
		self.employee = employee_list
	def __getitem__(self,item):
		return self.employee[item]
	def __len__(self):
		return len(self.employee)
company = Company(['tom','bob','jane'])

class Duck(object):
	def say(self):
		print("i am a duck")
animal_list=[Cat,Dog,Duck]
for animal in animal_list:
	animal().say()

定义有相同的函数,就说明看起来就一类东西(鸭子),所以就说他是鸭子类型
魔法函数的思想与鸭子类型的思想相同,在所有类中定义了 __getitem__方法,这个类就具备的迭代的特性

2.抽象基类(abc模块)


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值