面对对象编程基础之核心知识梳理三

五、核心知识梳理

9.面向对象之成员修饰符

9.4 静态方法
class test:
 def __init__(self,name):
    self.s_name = name

 @staticmethod
 def test_func(para):
    return para
print (test.test_func('abc')) # 静态方法通过类进行访问

在这里插入图片描述

给test_func函数加上私有

class test:
 def __init__(self,name):
    self.s_name = name

 @staticmethod
 def __test_func(para): # 加上私有下划线__
    return para
print (test.test_func('abc')) 

在这里插入图片描述

用类中的其他方法调用私有函数

class test:
 def __init__(self,name):
    self.s_name = name

 @staticmethod
 def __test_func(para):
    return para

 def test_func01(self):
     return test.__test_func(self.s_name)

obj =test('abc')
print (obj.test_func01())

在这里插入图片描述

9.5 普通方法

私有函数

class test:
 def __init__(self,name):
    self.s_name = name


 def __test_func(self):
    return self.s_name


obj =test('abc')
print (obj.__test_func())

在这里插入图片描述

用类中的方法调用私有函数

class test:
 def __init__(self,name):
    self.s_name = name


 def __test_func(self):
    return self.s_name

 def test_func01(self):
     return self.__test_func()  # 返回用过私有修饰符修饰过的普通方法的返回值

obj =test('abc')
print (obj.test_func01())

在这里插入图片描述

总结:通过私有修饰符进行修饰后的成员,只能被自己访问

10.面对对象之类的特殊成员call、setitem、getitem、delitem

10.1 call
class test:
 def __init__(self,name):
    self.s_name = name

 def func(self):
    print (self.s_name)
 
 def __call__(self):
    return 'call'

obj = test('abc')
print (obj) # obj是一个实例化后的对象
print (obj()) # 直接是对象加上括号,这种执行方式,就是执行对象中的__call__方法

在这里插入图片描述

10.2 setitem、getitem、delitem
  • getitem
class test:
 def __init__(self,name):
    self.s_name = name

 def func(self):
    print (self.s_name)

 def __getitem__(self, para):
    return para

obj = test('abc')
print (obj['get_item'])  
# 通过对象名[para]的方式,是访问对象中的__getitem__方法

在这里插入图片描述

  • setitem
class test:
 def __init__(self,name):
    self.s_name = name

 def func(self):
    print (self.s_name)

 def __setitem__(self, key, value):
    print(key, value)


obj = test('abc')
obj['get_item']= '123' 
# 通过对象名[key]=value的方式,是访问对象中的__setitem__方法,
# 其中的set_item这个值传给__setitem__中的key,123传给__setitem__中的value

在这里插入图片描述

  • delitem
class test:
 def __init__(self,name):
    self.s_name = name

 def func(self):
    print (self.s_name)

 def __delitem__(self, key):
    print (key)

obj = test('abc')
del obj['get_item']
# 通过del 对象名[key]的方式访问对象中的__delitem__方法,其中的get_item这个值传给了__delitem__中的key

在这里插入图片描述

总结

obj[‘get_item’] #getitem

obj[‘get_item’] = ‘123’ #setitem

del obj[‘get_item’] #delitem

11.面向对象之类的特殊成员dict

class test:
 def __init__(self,name):
    self.s_name = name

 def func(self):
     print (self.s_name)

 def __delitem__(self,key):
     print (key)

obj = test('abc')
print (test.__dict__) # 输出类test中的__dict__
print (obj.__dict__) # 输出对象obj中的__dict__

输出结果

{'__module__': '__main__', '__init__': <function test.__init__ at 0x0000022236E08708>, 'func': <function test.func at 0x0000022236E08DC8>, '__delitem__': <function test.__delitem__ at 0x0000022236E08948>, '__dict__': <attribute '__dict__' of 'test' objects>, '__weakref__': <attribute '__weakref__' of 'test' objects>, '__doc__': None}


{'s_name': 'abc'}

在这里插入图片描述

12.面向对象之类的特殊成员tier

import time
class test:
 def __init__(self):
     pass
 def __iter__(self):
    yield 1
    time.sleep(3)
    yield 2
    time.sleep(3)
    yield 3
obj = test()
for i in obj: # for循环对象obj
 print (str(i) + ' number')

在这里插入图片描述

如果对对象执行for循环即为循环对象时会自动执行对象中的iter方法,生成器返回值

六、面向对象的支柱

面向对象有三大支柱:封装、继承和多态。

封装:隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口

封装的例子:

类中定义的方法:把数据和数据的操作封装起来

发布了134 篇原创文章 · 获赞 16 · 访问量 6338

猜你喜欢

转载自blog.csdn.net/weixin_46108954/article/details/104646903