2022年 11月 4日

Python高级编程

最近要进面试,要求中要会python,在工作中层使用过python,但并非主流语言,因此对其高级特性并不是很熟悉,因此再次机会详细学习其高级特性,包括面向对象的编程方法、一些特定的操作函数、常用的函数修饰符、异步语句等最新的python3语法。

Python的基础内容在Python核心编程(3.8学习笔记)_zYongheng的博客-CSDN博客

 一、继承和多态

1. 继承作用和多重继承的执行顺序

  1. class Animal:
  2. def __init__(self, name):
  3. print("Animal Create")
  4. self.username = name
  5. def Say(self):
  6. pass
  7. class Wise:
  8. def __init__(self):
  9. print("Wise Create")
  10. self.language = "Wise"
  11. class Cat(Animal):
  12. def __init__(self, name):
  13. super().__init__(name)
  14. print("Cat Create")
  15. def Say(self):
  16. print("miaomiaomiao")
  17. class People(Animal, Wise):
  18. def __init__(self):
  19. Wise.__init__(self)
  20. Animal.__init__(self, "People")
  21. # 使用super不能实现多继承
  22. # super(People, self).__init__("People")
  23. print("People Create")
  24. if __name__ == '__main__':
  25. cat = Cat("name")
  26. cat.Say()
  27. print(isinstance(cat, Animal))
  28. print(isinstance(cat, Cat))
  29. people = People()

二、get、getattr、getitem、getattribute

  1. class MyClass(object):
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def __getattribute__(self, item):
  6. # __getattribute是通过.的方式获取类的对象的方法,默认是支持的
  7. return super(MyClass, self).__getattribute__(item)
  8. def __getitem__(self, item):
  9. # __getitem__是通过[]的方式获取对象,默认是不支持的,但是可以重写该方法让其支持
  10. return super(MyClass, self).__getattribute__(item)
  11. def __getattr__(self, item):
  12. # __getattr__如果调用不存在的属性,会执行此函数,返回指定的结果
  13. return None
  14. if __name__ == '__main__':
  15. c = MyClass("zhangsan", 18)
  16. print(c["name"])
  17. print(c.price)
  1. class MyClass(object):
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def __get__(self, instance, owner):
  6. print("__get__")
  7. return "self"
  8. class TestClass(object):
  9. c = MyClass("zhangsan", 18)
  10. if __name__ == '__main__':
  11. testClass = TestClass()
  12. print(testClass.c)

三、dict.items() 和 dict.iteritems()

在python中items是返回整个数组,二iteritems()返回迭代器,但是从Python3.5中,items()直接返回迭代器而删除了iteritems的方法。

  1. if __name__ == '__main__':
  2. d = {1: "one", 2: "two", 3: "three"}
  3. for k,v in d.items():
  4. print(k, v)
  5. # for k, v in d.iteritems():
  6. # print(k, v)

四、range和xrang的区别

同样range是返回列表对象,而xrange返回是生成器,但是在Python3中,range代替了xrange,而取消了xrange的定义。

五、@classmethod和@staticmethod的区别

  1. class A(object):
  2. count = 0
  3. def m1(self):
  4. # 该方法是实例方法
  5. A.count += 1
  6. self.count += 1
  7. print("self m1", self)
  8. @classmethod
  9. def m2(cls):
  10. # 该方法是类的方法
  11. cls.count += 1
  12. print("cls", cls)
  13. @staticmethod
  14. def m3():
  15. # 该方法和类没有关系
  16. print()
  17. if __name__ == '__main__':
  18. a = A()
  19. a.m1()
  20. A.m2()
  21. a.m3()

六、迭代对象、迭代器、生成器
– 迭代对象是一组容器

– 迭代器是容器中的__iter__返回的的对象,不需要生成对象所有内容,它实现了__next__和__iter__方法

– 生成器是一种特殊的迭代器方法,使用yield返回结果