Python面试题分享(四)

Python高级特性及面向对象知识解析
本文围绕Python高级知识展开,介绍了类方法、类实例方法、静态方法的区别,动态获取和设置对象属性的方法,函数参数传递方式,函数名可作参数的原因,还讲解了缺省参数、不定长参数、关键字参数,以及is和==的区别、魔法方法和面向对象只读属性的实现。

python高级2

1. Python中类方法、类实例方法、静态方法有何区别?

class Test(object):
      def __init__(name,age):
            self.name = name
            self.age = age
      @classmethod
      def test1(cls,name): # cls,类对象
            obj = cls(name,18) # 类对象可以创建实例对象
      @staticmethod
       def test2():
            pass
      def test3(self): # self,实例对象
            pass
test = Test("sss",19)

  • 类方法:是类对象的方法,在定义时需要在上方使用“@classmethod”进行装饰,形参为 cls, 表示类对象,类对象和实例对象都可调用;
  • 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为self,指代对象本身;
  • 静态方法:是一个任意函数,在其上方使用@staticmethod”进行装饰,可以用对象直接调用, 静态方法实际上跟该类没有太大关系

2. Python中如何动态获取和设置对象的属性?

if hasattr(Parent,'x'): # hasattr(obj,"") 判断实例对象是否有指定实例属性或者实例方法、类方法、静方法、类属性
     print(getattr(Parent,'x')) # getattr(obj,"") 从实例对象中获取指定实例属性或者实例方法、类方法、静方法、类属性
     setattr(Parent,'x',3) # setattr(obj,"","") 为实例对象设置指定实例属性或者实例方法
     print(getattr(Parent,'x'))

3. Python函数调用的时候参数的传递方式是值传递还是引用传递?
不可变类型的参数用值传递
可变类型的参数用引用传递

4. 为什么函数名字可以当做参数用?
Python中一切皆对象,函数名是函数在内存中的空间,也是一个对象。

5. 缺省(默认)参数和不定长参数、关键字参数的理解

def test(name="xiaoming"):
      print(name)


test()
test("小红")

  • 缺省参数指在调用函数的时候没有传入参数的情况下,调用参数设定的默认值,如果传入参数,会使用传入参数值
  • *args 是不定长参数,他可以表示输入参数是不确定的,可以是任意多个。
  • **kwargs 是关键字参数,赋值的时候是以键 = 值的方式,

def test1(*args,**kwargs): # 函数声明,表示该函数可以接收不定长的参数和关键字参数
      test1(*args,**kwargs) # 拆包

6.Python中is和==的区别?
is 判断的是 a对象是否就是 b对象,是通过 id来判断的。
==判断的是 a对象的值是否和b对象的值相等,是通过 value 来判断的。

7. Python的魔法方法?
init 初始化方法,当一个实例被创建的时候初始化的方法
new 才是实例化对象调用的第一个方法
call 允许一个类的实例像函数一样被调用
getitem 定义获取容器中指定元素的行为,相当于 self[key]
getattr 定义当用户试图访问一个不存在属性的时候的行为
setattr 定义当一个属性被设置的时候的行为
getattribute 定义当一个属性被访问的时候的行为
del 定义当一个类的实例对象内存被销毁前的行为

8. 面向对象中怎么实现只读属性?
属性私有化
property

class Test(object):
     def __init__(self):
          self.__age = 18
     def get_age(self):
          return self.__age
     @property
     def age(self):
          return self.__age
test = Test()
test.get_age()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值